从玩具图开始,我可以通过查找已经“创建”边缘的边来找到哪些顶点是创建者:
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所遵循的路径。如果创建者可以是超级节点,我想告诉查询一旦找到第一个“创建”边缘就输出'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')
有更好的食谱吗?
编辑:我刚在doc(示例2)中找到了一个示例,该示例显示存在被评估为真值的链接(可能没有正确写入这一点):
graph.traversal().V().where(out('created')).values('name')
有一个关于星图问题的警告,我认为这不适用于此,因为,我猜测,只有一个测试分支的步骤?
答案 0 :(得分:3)
你的最后一个例子是要走的路。
g.V().where(out('created')).values('name')
策略会为您优化并将其转化为:
g.V().where(outE('created')).values('name')
此外,.where(outE('created'))
不会遍历所有的边缘,它就像.hasNext()
一样,因此没有超级节点问题。