Gremlin:提供的遍历器未映射到值

Gremlin: The provided traverser does not map to a value

g.V()
    .has('atom', '_value', 'red').fold()
    .coalesce(unfold(), addV('atom').property('_value', 'red')).as('atom')
    .out('view').has('view', '_name', 'color').fold()
    .coalesce(unfold(), addE('view').from('atom').to(addV('view').property('_name', 'color')))

给我一个错误:

The provided traverser does not map to a value: []->[SelectOneStep(last,atom)] (597)

这是什么意思?

因此,当 as() 后跟 fold() 时,它会删除 as() 步骤中设置的变量。我使用 aggregate() 代替如下:

g.V()
    .has('atom', '_value', 'red')
    .fold().coalesce(
        unfold(), 
        addV('atom').property('_value', 'red')
    )
    .aggregate('atom')
    .out('view').has('view', '_name', 'color')
    .fold().coalesce(
        unfold(), 
        addE('view')
            .from(select('atom').unfold())
            .to(addV('view').property('_name', 'color'))
            .inV()
    )

as() 步骤就是所谓的 reducing barrier step。通过减少障碍步骤,查询的任何路径历史记录(例如通过 as() 应用标签)都会丢失。在减少障碍步骤时,许多路径被减少为单一路径。在那一步之后,将无法知道许多原始标记顶点中的哪一个是正确的检索点。

添加到此以防其他人遇到此问题。

当您在 from() 中使用 id 作为字符串而不是顶点对象时,会发生此特定错误。

为了明白我的意思,作为一个简单的测试 运行 下面的 gremlin 查询:

g.addE('view').from('atom').to(addV('view').property('_name', 'color'))

然后 运行 这个查询:

g.addE('view').from(V('atom')).to(addV('view').property('_name', 'color'))

第一个查询会给出上述错误,第二个不会。