如何使用 Gremlin 从内部顶点获得 return 属性,就像我从外部顶点所做的一样? (不是数组)
How, with Gremlin, to return properties from in-vertices the same as I do from out-vertices? (Not as arrays)
我试图从一组带标签的顶点开始遍历,然后让它们的所有内顶点通过特定类型的边连接,然后从那里,return 属性那些在顶点作为对象。我可以对从同一组标记顶点开始的一些外顶点执行同样的操作,没有问题,但是当我尝试使用一些内顶点时出现 "The provided traverser does not map to a value:" 错误。
我找到了一个解决方法,但它并不理想,因为它 return 将所需的 属性 值作为长度为 1 的数组。
以下是我如何使用外顶点成功完成非常相似的任务:
g.V().hasLabel('TestCenter').project('address').by(out('physical').project('street').by(values('street1')))
这 return 类似
==>{address={street=561 PLACE DE CEDARE}}
==>{address={street=370 N BLACK STATION AVE}}
太棒了!
然后我尝试对某些顶点进行相同类型的查询,如下所示:
g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code')))
并得到上述错误。
我找到的解决方法是将 .fold() 添加到最终的 "by" 中,如下所示:
g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code')).fold())
但我的回答是这样的
==>{host=[{aCode=7387}]}
==>{host=[{aCode=9160}]}
我想要的是这样的回复:
==>{host={aCode=4325}}
==>{host={aCode=1234}}
(注意:我不确定这是否相关,但我正在将 Gremlin 连接到 Neptune 数据库实例)
在我看来,从上面的错误和您的解决方法来看,并非所有 'TestCenter' 都具有来自类型 'hosts' 的边缘。使用 project
时,by 必须映射一个有效值。
你可以做两件事:
1) 确保在 project
:
中返回一个值
g.V().hasLabel('TestCenter').project('host')
.by(coalesce(__.in('hosts').project('aCode').by(values('code')), constant('empty')))
2) 过滤器执行值:
g.V().hasLabel('TestCenter').where(__.in('hosts'))
.project('host').by(__.in('hosts').project('aCode').by(values('code')))
我试图从一组带标签的顶点开始遍历,然后让它们的所有内顶点通过特定类型的边连接,然后从那里,return 属性那些在顶点作为对象。我可以对从同一组标记顶点开始的一些外顶点执行同样的操作,没有问题,但是当我尝试使用一些内顶点时出现 "The provided traverser does not map to a value:" 错误。
我找到了一个解决方法,但它并不理想,因为它 return 将所需的 属性 值作为长度为 1 的数组。
以下是我如何使用外顶点成功完成非常相似的任务:
g.V().hasLabel('TestCenter').project('address').by(out('physical').project('street').by(values('street1')))
这 return 类似
==>{address={street=561 PLACE DE CEDARE}}
==>{address={street=370 N BLACK STATION AVE}}
太棒了!
然后我尝试对某些顶点进行相同类型的查询,如下所示:
g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code')))
并得到上述错误。
我找到的解决方法是将 .fold() 添加到最终的 "by" 中,如下所示:
g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code')).fold())
但我的回答是这样的
==>{host=[{aCode=7387}]}
==>{host=[{aCode=9160}]}
我想要的是这样的回复:
==>{host={aCode=4325}}
==>{host={aCode=1234}}
(注意:我不确定这是否相关,但我正在将 Gremlin 连接到 Neptune 数据库实例)
在我看来,从上面的错误和您的解决方法来看,并非所有 'TestCenter' 都具有来自类型 'hosts' 的边缘。使用 project
时,by 必须映射一个有效值。
你可以做两件事:
1) 确保在 project
:
g.V().hasLabel('TestCenter').project('host')
.by(coalesce(__.in('hosts').project('aCode').by(values('code')), constant('empty')))
2) 过滤器执行值:
g.V().hasLabel('TestCenter').where(__.in('hosts'))
.project('host').by(__.in('hosts').project('aCode').by(values('code')))