2017-08-29 186 views
0

我只是在使用圖形API Cosmos DB ,它使用Gremlin語法進行查詢。Gremlin查詢獲取給定頂點的邊緣和邊緣

我在圖中有許多用戶(頂點),並且每個用戶都有'知道'屬性給其他用戶。其中一些出邊(outE),另一些邊(inE)取決於關係的創建方式。 我現在試圖創建一個查詢,它將返回給定用戶(頂點)的所有'知道'關係。 我可以很容易地通過獲得任何INE或歐特的ID:

g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').inE('knows') 
g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').outE('knows') 

其中'7112138f-fae6-4272-92d8-4f42e331b5e1'是我查詢用戶的ID,但我不知道提前,這是否是或縮小邊緣,所以想得到兩者(例如,如果用戶具有「知道」標籤的進出邊緣)。 我已經使用投影和OR運算符和東西例如爲:

g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').where(outE('knows').or().inE('knows')) 

,但它不是讓我回到我想要的數據的各種組合嘗試。

我想要的所有內容都是對所有inE和outE的Id的列表,它們對於給定頂點具有「知道」標籤。

還是有一個更簡單/更好的方式來模擬雙向關聯,如'知道'或'friendOf'?

感謝

回答

5

可以使用bothE步在這種情況下。 g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').bothE('knows')

+0

太棒了。結合otherV(),我可以得到每個知道或知道的頂點,這正是我想要的。因爲它沒有在TinkerPop ToC中列出,所以甚至不知道它們是否存在:http://tinkerpop.apache.org/docs/current/reference!謝謝 – LDJ

+3

你也可以使用'both'來獲得你想要的頂點。 http://tinkerpop.apache.org/javadocs/current/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#both-java.lang.String...- – pantalohnes

+0

更好!謝謝。 – LDJ