繁体   English   中英

什么是Gremlin查询可以让我直接或间接连接到一个特定顶点的所有顶点

[英]What is the Gremlin query that can get me all the vertices either directly or indirectly connected to one specific vertex

我需要一个Gremlin查询的帮助,该查询可以输出与一个特定顶点A及其级联相关顶点相关的所有顶点(这意味着所有顶点直接或间接与A相关)。

例如,在图表中

A -> B -> C
D

在A上运行此查询将给我B和C.

我现在的解决方案是一个丑陋的解决方案:

gV('A').both(); gV('A').both().both();

等等

任何帮助将非常感激。

你的解决方案并不难看; 它只缺少一点迭代和退出条件。

你需要最大深度吗? 根据图形的形状,您要执行的查询可能会返回该图形的所有顶点。

假设在Gremlin控制台中创建了一个玩具现代TinkerGraph:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]

此查询可能会有所帮助:

gremlin> g.V(1).repeat(both().simplePath()).emit().times(3).dedup()
==>v[3]
==>v[2]
==>v[4]
==>v[6]
==>v[5]

“从id = 1的顶点开始,在所有方向上遍历图形,最大深度为3,同时丢弃先前访问过的路径emit()步骤确保返回沿途找到的所有遍历顶点,而不仅仅是叶子返回“。

您想要确定哪些顶点仅通过特定边链接到该顶点的机会很高。 在这种情况下,您可以将标签传递给both()步骤,和/或链接一些过滤器。

在开发查询时,请随意链接path()步骤以更好地理解输出。

gremlin> g.V(1).repeat(both().simplePath()).emit().times(3).dedup().path()
==>[v[1],v[3]]
==>[v[1],v[2]]
==>[v[1],v[4]]
==>[v[1],v[3],v[6]]
==>[v[1],v[4],v[5]]

还有其他方法可以解决这个问题,但是这个查询应该让您开始并熟悉基本的Gremlin步骤和概念。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM