为什么 addE 因对先前步骤的字符串引用而失败?

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

如果顶点尚不存在,我正在尝试创建一个顶点和一条边。这是我尝试运行的 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
gremlin tinkerpop tinkerpop3
1个回答
0
投票

as()
步骤一起使用的标签在遍历穿过折叠屏障步骤(其中
fold()
是折叠屏障)后不会保留。

由于您已经通过 ID 引用父顶点,因此您可以在

from()
步骤中执行相同操作,而不需要 as-label:

g.V(4128).
    out().has('qt', 1).
    fold().coalesce(
        unfold(), 
        addV('test').addE('test_edge').from(V(4128))
    )
© www.soinside.com 2019 - 2024. All rights reserved.