如何使用Gremlin在两个顶点之间创建双向边?

18

如何使用Gremlin创建两个顶点之间的双向边?是否有直接的命令可以添加边缘,还是应该像顶点X->顶点Y和顶点Y->顶点X一样添加两条边缘?

1个回答

20

您可以使用both()步骤在两个顶点之间添加一条边,并在查询时忽略方向,这是在Gremlin中处理双向边的典型方法。

让我们打开Gremlin控制台并创建一个简单的图,其中Alice和Bob是朋友:

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
gremlin> graph = TinkerGraph.open()
gremlin> g = graph.traversal(standard())
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> 
==>null
gremlin> g.addV(label, 'user', 'name', 'Alice').as('alice').addV(label, 'user', 'name', 'Bob').as('bob').addE('friendWith').from('alice').to('bob')
==>e[4][0-friendWith->2]

这个操作会创建一个包含两个顶点和一条边的图:

gremlin> g.V()
==>v[0]
==>v[2]
gremlin> g.E()
==>e[4][0-friendWith->2]

注意在出去的方向上你无法从Bob顶点遍历到Alice顶点,但可以在进入的方向上遍历(第一个查询没有结果)。

gremlin> g.V().has('name', 'Bob').out('friendWith')
gremlin> g.V().has('name', 'Bob').in('friendWith')
==>v[0]

或者从Alice开始(第二个查询没有结果),你得到相反的结果:

gremlin> g.V().has('name', 'Alice').out('friendWith')
==>v[2]
gremlin> g.V().has('name', 'Alice').in('friendWith')

然而,您可以使用both()步骤双向遍历图形,并检索出Alice的朋友或Bob的朋友。

gremlin> g.V().has('name', 'Alice').both('friendWith')
==>v[2]
gremlin> g.V().has('name', 'Bob').both('friendWith')
==>v[0]

这也适用于更复杂的图,具有两个以上顶点和一条友好关系。 both() 步骤仅在尝试遍历相邻顶点时忽略边的方向。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接