Graph-Traversal:如何使用Gremlin查询“朋友和朋友的朋友”

时间:2012-02-28 16:53:10

标签: database graph-databases gremlin

在我的图表数据库中,我有分支和叶子。分支可以“包含”叶子和分支可以“包含”分支。

如何使用Gremlin,我能找到与给定分支直接或间接相关的所有叶子吗?

我让这个在Cypher工作:

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

*1..2的意思是“朋友和朋友的朋友”。

我想也许LoopV是前进的方向,但我得到一个Exception

  

从JsonReader读取JArray时出错。当前的JsonReader项不是数组:String

1 个答案:

答案 0 :(得分:3)

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

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

这说:

  1. 从id为1的顶点开始
  2. 带走外传"包含"边缘。
  3. 遍历out('包含')部分。
  4. 循环"无限" (确保你的树上没有环)
  5. 仅发出那些没有更多外向'包含' -edges的顶点。 (即叶子)
  6. 然而,从Cypher看你想要的东西,看起来你只想要两个步骤。因此,要做到这一点,只需:

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

    也许我误解了你的问题 - 无论哪种方式,都应该足以让你玩。