簡體   English   中英

如何使用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()步驟簡單地忽略邊緣的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM