Neptune创建边时Gremlin查询顶点缺失行为异常咨询
问题解答
行为是否符合预期?
这种行为符合Gremlin遍历逻辑和Amazon Neptune的默认处理规则,原因如下:
- 当源顶点
unq://id1缺失时,g.V('unq://id1')返回空遍历,后续的.as('from').addE(...)步骤因没有起始元素,整个遍历直接返回空结果,不会执行创建边的操作,自然也不会抛出异常。 - 而目标顶点
unq://id2缺失时,.to(__.V('unq://id2'))步骤尝试将边连接到不存在的顶点,Neptune会判定该操作无效,抛出你看到的空值/不存在值异常。
如何实现“任意顶点缺失时查询都失败”?
要达成需求,需在遍历中明确检查源和目标顶点是否存在,确保两者都存在后再创建边,可通过以下方式实现:
方式1:用fold()+coalesce()+fail()强制触发异常
g.V('unq://id1').fold() .coalesce(unfold(), fail('源顶点unq://id1不存在')) .as('from') .V('unq://id2').fold() .coalesce(unfold(), fail('目标顶点unq://id2不存在')) .as('to') .addE('id1~core.DataFlow').from('from').to('to') .property('prop1','abcd') .property('prop2','xyz')
当源或目标顶点缺失时,fail()会直接抛出指定的异常信息,满足“任意顶点缺失则查询失败”的要求。
方式2:用match步骤验证顶点存在(需主动扩展异常逻辑)
g.match( __.as('from').hasId('unq://id1'), __.as('to').hasId('unq://id2') ).fold() .coalesce(unfold(), fail('源或目标顶点不存在')) .addE('id1~core.DataFlow').from('from').to('to') .property('prop1','abcd') .property('prop2','xyz')
match步骤要求所有匹配条件同时满足(即两个顶点都存在),若不满足则遍历返回空,再通过fold()+coalesce()+fail()触发异常。
内容的提问来源于stack exchange,提问作者Karthik Nair
相关产品推荐
相关产品推荐

