边缘创建期间的 Neptune 查询行为

问题描述 投票:0回答:1

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.
amazon-web-services gremlin tinkerpop amazon-neptune
1个回答
0
投票

如果源顶点不存在,按照查询的编写方式,它将结束,因为第一个 V 将不会产生结果。

所以如果我们假设

'unq://id1'
不存在,那么查询将在
g.V('unq://id1')
部分之后结束。

如果您需要知道该顶点存在或失败,您可以在初始

coalesce
之后使用
.fold().coalesce(unfold(),fail('source vertex does not exist'))
步骤,例如
g.V(...)

作为替代方案,您可以使用相当新的

mergeE
步骤进行探索。如果源或目标或两者缺失,该步骤将返回错误。

© www.soinside.com 2019 - 2024. All rights reserved.