2012-02-28 139 views
3

在我的圖形數據庫中,我有分支和葉子。分支可以「包含」葉和分支可以「包含」分支。Graph-Traversal:我如何使用Gremlin查詢「朋友和朋友的朋友」

如何使用Gremlin可以找到給定分支的所有葉子,它們與它直接或間接相關?

我得到這個在Cypher支架工作:

START v=node(1) MATCH v-[:contains*1..2]->i RETURN v,i 

*1..2的意思是 「朋友和朋友的朋友」。

我想也許LoopV是前進的方向,但我只是得到一個Exception

錯誤從JsonReader閱讀JArray。當前的JsonReader項目不是數組:字符串

回答

3

您可以在Gremlin 1.4+中執行以下操作。

g.v(1).out('contains').loop(1){true}{it.out('contains').count() == 0} 

這是說:

  1. 開始在頂點ID爲1
  2. 以卸任 「包含」 邊緣。
  3. 循環輸出('contains')部分。
  4. 「無限循環」(確保樹中沒有循環)
  5. 只發出那些沒有更多傳出'包含'邊的觸點。 (即樹葉)

然而,看看你從Cypher想要什麼,看起來你只需要2個步驟。因此,要做到這一點,只需做:

g.v(1).out('contains').loop(1){it.loops < 3} 

也許我誤解你的問題---無論哪種方式,這應該給你足夠的一起玩。