【问题标题】:Traverse to vertices without any edge with gremlin使用 gremlin 遍历没有任何边的顶点
【发布时间】:2026-02-05 06:10:01
【问题描述】:

我的顶点有两个标签“用户”和“组”之一,边被标记为“包含”。 “组”顶点可能指向“用户”顶点或其他“组”顶点。我使用以下查询来查找从组顶点开始的“用户”顶点。如果一个“Group”顶点指向另一个“Group”顶点,它会遍历该子“Group”顶点以查找“User”顶点。

g.V().hasLabel('Group').has('AccountName','oem').repeat(out('contains')).until(hasLabel('User'))

现在我需要遍历不指向任何其他顶点的“组”顶点。在阅读了一些其他帖子后,我尝试了以下内容,但我得到了“Gremlin 查询编译错误:'P.not' 和 '__.not' 之间的歧义”什么是表达这种东西的正确方法?

g.V().hasLabel('Group').has('AccountName','oem').repeat(out('contains')).until(not(outE())) <<== Error

【问题讨论】:

    标签: gremlin azure-cosmosdb-gremlinapi


    【解决方案1】:

    除了使用not(outE()),您还可以使用outE().count().is(0) 作为表达此查询的另一种方式。这将消除显式使用 P 类或匿名遍历(双下划线,__)和not() 所需的歧义。

    【讨论】:

    • 我想你会更喜欢使用____.not(outE())产生的匿名遍历而不是使用outE().count().is(0),因为它更有效。
    • 正确。我的建议更多的是“如果显式添加匿名遍历不起作用,这里有一个替代方案”。