Tinkerpop Gremlin 获取指向列表中顶点的边

Tinkerpop Gremlin Get Edges that go to vertices within a list

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

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

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

我正在做的是遍历所有 'person' 个顶点,聚合它们,然后尝试获取所有通向该聚合列表中另一个顶点的传出边。我希望上面的查询 return the edge labelled "knows" that goes between vertex 1 and 2, and the one between 1 and 4,但是没有 returned。如果我只是想获取这些边的另一端的顶点,而不是边本身,则以下工作正常,returning 顶点 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]