示例数据:Tinker Modern
查询:
g.V()
.hasLabel("Person")
.bothE().bothV()
.hasLabel("Person")
.path()
.by(label())
结果:
['Person', 'knows', 'Person']
['Person', 'knows', 'Person']
['Person', 'created', 'Person']
['Person', 'knows', 'Person']
['Person', 'knows', 'Person']
['Person', 'knows', 'Person']
['Person', 'knows', 'Person']
['Person', 'created', 'Person']
['Person', 'created', 'Person']
['Person', 'knows', 'Person']
['Person', 'knows', 'Person']
['Person', 'created', 'Person']
此结果不应包含“已创建”边缘,因为这是针对软件的人
答案 0 :(得分:3)
我重写了你的遍历:
g.V().
hasLabel("person").
bothE().bothV().
hasLabel("person").
path().
by(label)
我认为您可以期待看到"创建" edge因为你遍历bothE()
,意味着你从一个" person"开始,并遍历传入和传出边缘。这些边缘可能是"创建的#34;边缘。然后,你执行bothV()
,这意味着从这些边的源和目标遍历。由于其中一些边缘被创建了#34;边缘他们将有一个"人"在一边("人和#34;你开始的顶点)和一个"软件"在另一。
如果我们看一个人,也许更有意义:
gremlin> g.V().has('person','name','marko').bothE('created').bothV().label()
==>person
==>software
请注意,当我们遍历"创建"边缘并做bothV()
我们得到一个"人" (即marko)和一个"软件"。如果我们添加一个过滤器来摆脱"软件":
gremlin> g.V().has('person','name','marko').bothE('created').bothV().hasLabel('person').values('name')
==>marko
我们最终得到了" marko"。在你的遍历中也会发生同样的事情。如果你想过滤掉"软件"然后你应该使用边缘标签更具体:
gremlin> g.V().
......1> hasLabel("person").
......2> bothE("knows").bothV().
......3> hasLabel("person").
......4> path().
......5> by(label)
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
或许您不需要bothV()
:
gremlin> g.V().
......1> hasLabel("person").
......2> bothE().otherV().
......3> hasLabel("person").
......4> path().
......5> by(label)
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
或有点奇怪,但你可以这样过滤边缘:
gremlin> g.V().
......1> hasLabel("person").
......2> bothE().filter(bothV().hasLabel('person').count().is(2)).bothV().
......3> path().
......4> by(label)
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
==>[person,knows,person]
无论如何,这应该是你需要考虑的足够的例子 - 我确定还有其他方法可以使这项工作。