查找节点的结果集的所有边



我有一个返回一组节点的查询,如下所示:

g.V().as("a","node").has("prop1", true).out().as("b","node").hasLabel("device")
.in().as("c","node").hasLabel("lbl1").has("prop1", false).select("a","b","c").limit(200)

现在我想返回所有这些节点和它们之间的任何边作为结果。我尝试了以下操作,但它总是返回空:

g.V().(....)
.select("a","b","c").limit(200)
.select("node").dedup().fold().as('all')
.unfold().as('start').bothE().as('edge').otherV().as('end')
.where(within('all'))
.select('start', 'edge', 'end').dedup()

不幸的是,总是返回空值。我想我的where过滤器不正确。如何仅为节点"c"其中有一个在"a"里吗?

我想保持这个通用,这样我就可以用它来处理多个不同的查询,这些查询都返回一组节点。

对于这个查询,您应该检查该顶点是否在开始顶点的集合中。因此,您应该首先fold()开始集,然后使用within()谓词在where内检查它下面是查询,例如g = TinkerFactory.createModern().traversal()

g.V().limit(3).fold().as('all').
unfold().as('a').outE().as('b').otherV().as('c').
where(within('all')).
select('a', 'b', 'c')

参见第二个例子:https://tinkerpop.apache.org/docs/current/reference/#where-step

最新更新