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

Graph 如何使用gremlin在两个顶点之间创建双向边?,graph,gremlin,Graph,Gremlin,使用gremlin在两个顶点之间创建双向边的最佳方法是什么。是否有直接命令来添加边,或者我们应该添加两条边,如顶点X->顶点Y和顶点Y->顶点X?您可以在两个顶点之间添加边,然后在查询时使用both()步骤忽略方向。这就是在Gremlin中处理双向边的典型方式 让我们打开Gremlin控制台,创建一个简单的图表,其中Alice和Bob是朋友: \,,,/ (o o) -----oOOo-(3)-oOOo----- gremlin> graph = Tin

使用gremlin在两个顶点之间创建双向边的最佳方法是什么。是否有直接命令来添加边,或者我们应该添加两条边,如顶点X->顶点Y和顶点Y->顶点X?

您可以在两个顶点之间添加边,然后在查询时使用
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顶点,但可以在传入方向上遍历(第一个查询不会产生任何结果)

或者从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()
步骤将忽略边的方向

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