如何使用 gremlin 在两个顶点之间创建双向边?
How to create a bidirectional edge between two vertices using gremlin?
使用 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 顶点,但可以在入方向上遍历(第一个查询没有结果)。
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()
步骤在尝试遍历相邻顶点时简单地忽略边的方向。
使用 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 顶点,但可以在入方向上遍历(第一个查询没有结果)。
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()
步骤在尝试遍历相邻顶点时简单地忽略边的方向。