3
什么是使用gremlin在两个顶点之间创建双向边的最佳方法。是否有直接的命令添加边或者是否应该添加两个边,如顶点X - >顶点Y和顶点Y - >顶点X?如何使用gremlin在两个顶点之间创建双向边?
什么是使用gremlin在两个顶点之间创建双向边的最佳方法。是否有直接的命令添加边或者是否应该添加两个边,如顶点X - >顶点Y和顶点Y - >顶点X?如何使用gremlin在两个顶点之间创建双向边?
您可以在两个顶点之间添加边,然后通过使用both()
步骤在查询时忽略方向。这是您通常在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的朋友或鲍勃的朋友。
gremlin> g.V().has('name', 'Alice').both('friendWith')
==>v[2]
gremlin> g.V().has('name', 'Bob').both('friendWith')
==>v[0]
这也适用于具有两个以上顶点和一个友谊关系的更复杂的图。在尝试遍历相邻顶点时,步骤简单地忽略了边的方向。