如果顶点尚不存在,我正在尝试创建一个顶点和一条边。这是我尝试运行的 Gremlin 查询:
g.V(4128).as('parent').out().has('qt', 1).fold().coalesce(unfold(), addV('test').addE('test_edge').from('parent'))
但它抛出错误:
addE(test_edge) 失败,因为 from() 遍历(应该给出 顶点)失败:提供的遍历器未映射到值
我尝试了一些变体来找出问题所在,这些都有效:
g.V(4128).as('parent').out().has('qt', 1).fold().coalesce(unfold(), addV('test'))
g.V(4128).as('parent').out().has('qt', 1).fold().coalesce(unfold(), addV('test').addE('test_edge').from(__.V(4128)))
因为我有顶点 id,所以我可以使用第二种变体,但我真的很想了解原始查询出了问题的地方。我不知道为什么,但我认为
from('parent')
失败了,因为 Vertex 4128 上没有现有的边。直到我放下图表,这个错误才出现,这样我就可以在没有所有开发混乱的情况下进行测试。
g.V(4128).as('parent').out() // empty
与
as()
步骤一起使用的标签在遍历穿过折叠屏障步骤(其中 fold()
是折叠屏障)后不会保留。
由于您已经通过 ID 引用父顶点,因此您可以在
from()
步骤中执行相同操作,而不需要 as-label:
g.V(4128).
out().has('qt', 1).
fold().coalesce(
unfold(),
addV('test').addE('test_edge').from(V(4128))
)