【问题标题】:How to get the list of all incoming intermediate vertices between a source vertex and target vertex of specific label using Gremlin query?如何使用 Gremlin 查询获取特定标签的源顶点和目标顶点之间的所有传入中间顶点的列表?
【发布时间】:2020-02-17 08:19:56
【问题描述】:

我使用 Gremlin 查询从选定的顶点“P1”获取所有传出顶点(带有边缘标签“has”)的列表,直到它到达带有特定标签“L3”的顶点:

g.V().has("id”,”P1”).repeat(out(“has”)).until(hasLabel(“L3”)).path().by("id")

正如预期的那样,上面的查询返回了选定顶点和标为“L3”的目标顶点之间的所有中间节点的列表。

但是,当以相反的方向使用相同的查询(将“out”更改为“in”)时,即获取从选定顶点到具有特定标签的目标顶点的所有传入顶点的列表,我得到一个gremlin 立即查询错误。

这里是查询:

 g.V().has("id”,”P3”).repeat(in(“has”)).until(hasLabel(“L1”)).path().by("id")

错误如下所示:

Failure in submitting query: 
Error: Script compile error: Missing ')' 

我在查询中没有看到任何丢失的括号,我对传入或传出顶点所做的查询之间的唯一变化是使用“in”而不是“out”。

在官方 tinkerpop 文档 (https://tinkerpop.apache.org/docs/3.2.9/reference/#_traversal_strategies_2) 中,在遍历策略中,我找不到任何带有 repeat(in()) 的示例,只有 repeat(out())。是否有特殊的查询或方法可以从选定的顶点获取所有传入的顶点,直到到达具有特定标签的顶点?

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    我不确定这是否是您的问题,但我可以看到您会在哪里收到错误,因为“in”是 Groovy 中的保留字,因此您必须使用匿名遍历类显式生成它:__.in(),因此:

    g.V().has("id","P3").repeat(__.in("has")).until(hasLabel("L1")).path().by("id")
    

    参考文档中的许多地方都记录了此问题,但也许您错过了它(您也参考了相当旧版本的文档) - 例如,在Vertex Steps 的注释中描述。

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多