【问题标题】:Gremlin Query: How to get all "internal" edges in the query so far?Gremlin 查询:到目前为止,如何在查询中获取所有“内部”边缘?
【发布时间】:2020-10-05 10:32:08
【问题描述】:

因此,我正在尝试在 gremlin 查询中可视化到目前为止的节点以及这些节点之间的边;如果可以的话,“内部”边缘。

例如,我有这个 gremlin 查询:

g.V().hasLabel("Person").out("Expert in")

这会产生一组节点。一般来说,我如何进行 gremlin 查询以获取此结果集中节点之间的所有边?

感谢您的帮助:)

【问题讨论】:

    标签: database graph gremlin tinkerpop


    【解决方案1】:

    out() 步骤是outE().inV() 的简写,因此获取边缘的第一步是显式遍历边缘,使它们成为路径历史的一部分。您可以通过多种方式从该历史记录中获取优势 - path() 步骤怎么样?

    g.V().hasLabel("Person").outE("Expert in").inV().path()
    

    【讨论】:

    • 谢谢,但是这会将返回的边限制在从 g.V().hasLabel("Person").out("Expert in") 返回的节点之间(这就是我想要的)? :)
    • Gremlin 在您的遍历和我的遍历中都受限于相同的“专家”边缘。换句话说,除了通过这些边之外,他没有其他路径可以从“人”到相邻顶点,所以是的,结果是相同的,只是现在您将边作为结果。
    【解决方案2】:

    我想通了!

    这个 gremlin 查询应该可以解决问题:

    g.V().hasLabel('Person') // <-- Nodes chosen so far; can be any query resulting in nodes
    .dedup()
    .union(outE(), inE()) 
    .groupCount()
    .unfold()
    .where(select(values).is(gt(1)))
    .select(keys)
    

    这需要所有出边和所有入边的并集,然后删除那些不多次出现的边。结果是到目前为止查询中节点之间的所有边:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      相关资源
      最近更新 更多