Tinkerpop Gremlin 获取到达列表中顶点的边

问题描述

我正在尝试查询到达聚合列表中顶点的边。这听起来很简单,而且应该如此,但我的查询似乎写错了,我就是不知道为什么。无论如何,我将使用 Modern Toy Graph 来举个例子,这在这种情况下不一定有多大意义,但仍然说明了我想要做什么:

graph = TinkerFactory.createModern()
g = graph.traversal()

g.V().
  hasLabel('person').
    aggregate('x').
  outE().
    where(inV().is(within('x')))

我正在做的是遍历所有“人物”顶点,聚合它们,然后尝试获取通向该聚合列表中另一个顶点的所有传出边。我希望上述查询返回 the edge labelled "knows" that goes between vertex 1 and 2,and the one between 1 and 4,但没有返回任何内容。如果我只是想获得这些边另一端的顶点,而不是边本身,则以下方法可以正常工作,返回顶点 2 和 4:

g.V().
  hasLabel('person').
    aggregate('x').
  out().
    where(within('x'))

那么我怎样才能得到导致顶点已经聚合在列表中的边?

(再一次,我知道这个例子在这个特定的图表中没有多大意义,我可以很容易地查询 outE('kNows'),但这个查询与不同的图表相关。)

谢谢。

解决方法

您不能完全那样使用​​ is()。一个简单的解决方法是将您的“工作”遍历与不“工作”的遍历结合起来:

gremlin> g.V().hasLabel('person').
......1>   aggregate('x').
......2>   outE().
......3>   where(inV().where(within('x')))
==>e[7][1-knows->2]
==>e[8][1-knows->4]