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

Yam*_*XYZ 5 database cassandra gremlin scylla janusgraph

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')))
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

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

这是什么意思?

oon*_*alo 5

添加此内容以防其他人遇到此情况。

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

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

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

然后运行这个查询:

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

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


Yam*_*XYZ 4

所以看起来当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()
    )
Run Code Online (Sandbox Code Playgroud)