Gremlin 查询提交给 neptune 以创建边,当源/目标顶点丢失时,行为会有所不同。
我们使用以下格式的 gremlin 查询在亚马逊 neptune 上提交边缘创建。
g.V('unq://id1').as('from')
.addE('id1\~core.DataFlow').from('from')
.to(\_\_.V('unq://id2'))
.property('prop1','abcd')
.property('prop2','xyz')```
The above query fails only when the target vertex which is unq://id2 is missing. With the exception 'The traversal has tried to use a null or non-existent value in the step'
It doesn't fail when the source vertex is missing. It also doesn't fail, when both the source & target vertex are missing.
Is this behavior expected?
I wanted my queries to fail when either vertices are missing.
如果源顶点不存在,按照查询的编写方式,它将结束,因为第一个 V 将不会产生结果。
所以如果我们假设
'unq://id1'
不存在,那么查询将在g.V('unq://id1')
部分之后结束。
如果您需要知道该顶点存在或失败,您可以在初始
coalesce
之后使用 .fold().coalesce(unfold(),fail('source vertex does not exist'))
步骤,例如 g.V(...)
。
作为替代方案,您可以使用相当新的
mergeE
步骤进行探索。如果源或目标或两者缺失,该步骤将返回错误。