【问题标题】:Tinkerpop Gremlin Get Edges that go to vertices within a listTinkerpop Gremlin 获取指向列表中顶点的边
【发布时间】:2021-04-20 13:07:26
【问题描述】:

我正在尝试查询去往聚合列表中顶点的边。这听起来很简单,应该是,但我似乎写错了我的查询,我就是不知道为什么。无论如何,我将使用 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'),但这个查询与不同的图表相关。)

谢谢。

【问题讨论】:

    标签: gremlin tinkerpop


    【解决方案1】:

    你不能这样使用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]
    

    【讨论】:

    • 谢谢斯蒂芬。我尝试了where(inV().within('x'))where(inV().is().within('x')),它们都给出了错误,并假设上述可能是is() 的正确用法,因为它至少没有出错。我从未考虑过添加另一个where() 步骤。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 2019-05-14
    • 2022-01-21
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多