3

私のグラフデータベースには、枝と葉があります。枝は葉を「含む」ことができ、枝は枝を「含む」ことができます。

Gremlin を使用して、特定のブランチに直接的または間接的に関連するすべてのリーフを見つけるにはどうすればよいでしょうか?

私はこれをCypherで動作させました:

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

*1..2は「友達、友達の友達」という意味です。

私はおそらくLoopV前進する方法だと思ったが、私はただ得るException

JsonReader からの JArray の読み取り中にエラーが発生しました。現在の JsonReader アイテムは配列ではありません: 文字列

4

1 に答える 1

3

Gremlin 1.4+ では次のことができます。

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

これは言う:

  1. ID 1 の頂点から開始
  2. 発信「含む」エッジを取得します。
  3. out('contains') セクションをループします。
  4. 「無限に」ループします (ツリーにループがないことを確認してください)
  5. これ以上外向きの 'contains' エッジを持たない、接触した頂点のみを放出します。(つまり、葉)

しかし、あなたが Cypher に求めていたものを見ると、2 つのステップしか必要ないように見えます。したがって、それを行うには、次のようにします。

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

おそらく、私はあなたの質問を誤解していたのでしょう --- いずれにせよ、それで十分に遊べるはずです。

于 2012-02-29T01:20:31.090 に答える