如何使用Gremlin单次查询获取指定节点的所有出入向关联节点
合并查询方案
你完全可以将两次查询合并为单次执行,Gremlin原生提供了邻接节点遍历的快捷步骤,写法更简洁的同时还能减少遍历开销,比分开两次执行效率高很多。
最简写法
直接用both()一步获取所有入向+出向关联节点,等价于你原来两次查询结果的并集:
g.V().has('primaryName', 'NAME_OF_NODE').both().values('primaryName')
注:你原来的写法也可以进一步简化,出向关联可以直接用
out()替代inE().outV(),入向关联可以直接用in()替代outE().inV(),both()本质就是in()和out()结果的合并。
如果你后续需要基于边的属性做过滤(比如只查特定类型的关联边),可以用bothE() + otherV()的写法,效果和上面等价,还能附加边的过滤条件:
// 示例:过滤关联边类型为"合作"的所有关联节点 g.V().has('primaryName', 'NAME_OF_NODE').bothE('合作').otherV().values('primaryName')
常用扩展用法
- 如果需要对重复的关联节点去重,可以在取属性前加
dedup()步骤:g.V().has('primaryName', 'NAME_OF_NODE').both().dedup().values('primaryName') - 如果需要区分每个关联节点的方向(入向/出向),可以用
project()步骤同时返回方向和节点名称:g.V().has('primaryName', 'NAME_OF_NODE').bothE() .project('关联方向', '节点名称') .by(T.direction) .by(otherV().values('primaryName'))
内容的提问来源于stack exchange,提问作者Karan Agrawal
相关产品推荐
相关产品推荐

