2012-02-28 140 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} 

也许我误解你的问题---无论哪种方式,这应该给你足够的一起玩。