Graph Gremlin查询以查找在两个方向上连接的顶点

Graph Gremlin查询以查找在两个方向上连接的顶点,graph,gremlin,Graph,Gremlin,在这个问题中,我想知道是否有一种方法可以找到从给定顶点以两种方式连接的顶点。我们知道重复数据消除()是为了避免重复。但是有没有办法找到具有平行边的顶点呢?搜索具有平行边的顶点是循环检测的一种特殊情况 您可以找到循环检测的方法 与您的案例相匹配的简化版代码: g.V().as('a'). out().simplePath().where(out().as('a')). path().dedup().by(unfold(). order().by(id). dedup().f

在这个问题中,我想知道是否有一种方法可以找到从给定顶点以两种方式连接的顶点。我们知道重复数据消除()是为了避免重复。但是有没有办法找到具有平行边的顶点呢?

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

您可以找到循环检测的方法

与您的案例相匹配的简化版代码:

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

示例:

我知道需要从中了解具有平行边的其他顶点的顶点。我尝试了下面的查询,这很好,但是当连接增加时,延迟会增加。{.g.V(x.id()).out('label')。where('uuuu.out('label')).hasId(x.id())}如果我知道顶点,你可以修改查询并解释一点展开部分。如果你知道起始顶点,你可以做
g.V(x.id()).as('a').out('label')。where(out('label')。as('a'))
,请注意,如果这个查询连接到它自己,它也将返回第一个顶点。是的,我可以这样做。我还尝试了g.V(x.id()).out('label')。where(out('label')).hasId(x.id()),它可以工作,但是有没有更好的方法可以做到这一点,因为您可以看到,如果顶点的输出边增加,则此查询所用的时间将不断增加。