如何限制遍历分支的次数

How to limit the number of times a branch is traversed

从玩具图开始,我可以通过查找具有 'created' 个出边的边来找到哪些顶点是创建者:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
graph.traversal().V().as('a').out('created').select('a').values('name')
==>marko
==>josh
==>josh
==>peter

我可以使用去重步骤过滤掉重复项...

gremlin> graph.traversal().V().as('a').out('created').select('a').dedup().values('name')
==>marko
==>josh
==>peter

...但这只会改变输出,不会改变 Gremlin 遵循的路径。如果创建者可以成为超级节点,我想告诉查询在找到第一个 'created' 边缘后输出 'a',然后停止遍历当前 'a' 的输出步骤并继续下一个 'a'。这能做到吗?

此语法具有所需的输出。他们的行为是否如我所愿?

graph.traversal().V().where(out('created').count().is(gt(0))).values('name')
graph.traversal().V().where(out('created').limit(1).count().is(gt(0))).values('name')

有更好的食谱吗?

编辑:我刚刚在 where 文档(示例 2)中找到了一个示例,该示例显示 link 的存在被评估为真实(可能措辞不正确):

graph.traversal().V().where(out('created')).values('name')

有一条关于星图问题的警告,我认为它不适用于此处,因为我猜,只有一个测试分支的步骤?

你的最后一个例子就是要走的路。

g.V().where(out('created')).values('name')

策略将为您优化并将其转化为:

g.V().where(outE('created')).values('name')

此外,.where(outE('created'))不会遍历所有出边,它就像一个.hasNext(),因此没有超节点问题。