Gremlin:"The provided traverser does not map to a value" 使用项目时
Gremlin: "The provided traverser does not map to a value" when using project
在现代图中,我想为每个人获取姓名和他创建的软件的名称列表。所以我尝试了以下查询
g.V().hasLabel('person').project('personName','softwareNames').
by(values('name')).
by(out('created').values('name').aggregate('a').select('a'))
但我收到错误
The provided traverser does not map to a value: v[2]->[VertexStep(OUT,[created],vertex), PropertiesStep([name],value), AggregateStep(a), SelectOneStep(last,a)]
问题似乎是顶点 2 没有 "created" 条边。
如果我 运行 查询仅在具有至少一个 "created" 边的顶点上运行,例如对于顶点 4("V(4)" 而不是 "V()"),结果是
==>[personName:josh,softwareNames:[ripple,lop]]
如何获得顶点 2 的空软件名称列表,而不是错误?
您可以将 Gremlin 简化为:
gremlin> g.V().hasLabel('person').
......1> project('personName','softwareNames').
......2> by('name').
......3> by(out('created').values('name').fold())
==>[personName:marko,softwareNames:[lop]]
==>[personName:vadas,softwareNames:[]]
==>[personName:josh,softwareNames:[ripple,lop]]
==>[personName:peter,softwareNames:[lop]]
by()
调制器仅对传递给它的内部遍历执行 next()
,因此您需要自己减少结果 - 在这种情况下 fold()
会执行此操作并处理结果为空的情况。
在现代图中,我想为每个人获取姓名和他创建的软件的名称列表。所以我尝试了以下查询
g.V().hasLabel('person').project('personName','softwareNames').
by(values('name')).
by(out('created').values('name').aggregate('a').select('a'))
但我收到错误
The provided traverser does not map to a value: v[2]->[VertexStep(OUT,[created],vertex), PropertiesStep([name],value), AggregateStep(a), SelectOneStep(last,a)]
问题似乎是顶点 2 没有 "created" 条边。
如果我 运行 查询仅在具有至少一个 "created" 边的顶点上运行,例如对于顶点 4("V(4)" 而不是 "V()"),结果是
==>[personName:josh,softwareNames:[ripple,lop]]
如何获得顶点 2 的空软件名称列表,而不是错误?
您可以将 Gremlin 简化为:
gremlin> g.V().hasLabel('person').
......1> project('personName','softwareNames').
......2> by('name').
......3> by(out('created').values('name').fold())
==>[personName:marko,softwareNames:[lop]]
==>[personName:vadas,softwareNames:[]]
==>[personName:josh,softwareNames:[ripple,lop]]
==>[personName:peter,softwareNames:[lop]]
by()
调制器仅对传递给它的内部遍历执行 next()
,因此您需要自己减少结果 - 在这种情况下 fold()
会执行此操作并处理结果为空的情况。