您的解决方案并不难看;它只是缺少一点迭代和退出条件。
您需要最大深度吗?根据图表的形状,您要执行的查询可能会返回该图表的所有顶点。
假设在 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 步骤和概念。