【问题标题】:Gremlin query to find vertices which are connected in both directionsGremlin 查询以查找在两个方向上连接的顶点
【发布时间】:2020-08-13 14:58:12
【问题描述】:

Gremlin: Count connections ignoring edges with a parallel edge in the opposing direction 在这个问题中,我想知道是否有办法找到从给定顶点以两种方式连接的顶点。我们知道 dedup() 是为了避免重复。但是有什么方法可以找到具有平行边的顶点吗?

【问题讨论】:

    标签: graph gremlin


    【解决方案1】:

    搜索具有平行边的顶点是循环检测的一种特殊情况。

    您可以找到循环检测的配方here

    与您的情况相匹配的代码的简化版本:

    g.V().as('a').
      out().simplePath().where(out().as('a')).
      path().dedup().by(unfold().
        order().by(id).
        dedup().fold())
    

    示例:https://gremlify.com/8c

    【讨论】:

    • 我知道我需要知道其他具有平行边的顶点的顶点。我尝试了以下查询,这很好,但是当连接增加时,延迟会增加。 {。 gV(x.id()).out('label') .where(__.out('label').hasId(x.id())) } 你能修改查询并解释一下展开部分吗我知道顶点。
    • 如果你知道起始顶点,你可以直接做g.V(x.id()).as('a').out('label').where(out('label').as('a')),注意这个查询也会返回第一个顶点,如果它连接到自己
    • 是的,我能做到。我也试过 gV(x.id()).out('label').where(out('label').hasId(x.id()) 并且它有效但是有没有更好的方法来做这件事可以看到顶点的出边是否增加了这个查询所花费的时间会不断增加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 2015-07-06
    • 2019-07-27
    相关资源
    最近更新 更多