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

时间:2018-07-19 00:16:25

标签: azure-cosmosdb gremlin

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

例如,在图中

A -> B -> C
D

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

我目前的解决方案很丑:

g.V('A').both(); g.V('A').both().both();

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

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

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

假设在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的基本步骤和概念。