合并Gremlin中多个查询的结果

问题描述 投票:1回答:2

假设我要从数据库中获取一些顶点:

g.V(1, 2, 3)

然后有另一组顶点:

g.V(4, 5, 6)

想象一下,不仅是g.V(),而且还有一些更复杂的遍历来获得我的顶点。但是遍历必须以V()开始,因为我想从所有节点中进行选择。

我们还假设我想多次这样做。所以我可能要合并7个不同的结果集。 每个人都有完全不同的方式来获得结果。


现在,我想将这两个结果合并为一个结果集。我的第一个想法是:

g.V(1, 2, 3).fold().as('x').V(4, 5, 6).fold().as('x').select(all, 'x').unfold()

但是这不起作用。 fold的第二次调用将清除我的“局部变量”,因为这是一个障碍步骤。

我当前的尝试是这样:

g.V(1, 2, 3).fold().union(identity(), V(4, 5, 6).fold()).unfold()

这可行,但看起来有点复杂。如果我想重复7次,它将产生一个非常复杂的查询。

是否有更好的方法来完成两个不同查询的结果的简单合并?

gremlin tinkerpop tinkerpop3 amazon-neptune gremlinpython
2个回答
2
投票

如何使用aggregate()

gremlin> g.V(1,2,3).aggregate('x').fold().V(4,5,6).aggregate('x').cap('x')
==>[v[1],v[2],v[3],v[4],v[5],v[6]]
gremlin> g.inject(1).union(V(1,2,3).aggregate('x'),V(4,5,6).aggregate('x')).cap('x')
==>[v[1],v[2],v[3],v[4],v[5],v[6]]

[您的问题中没有特定的遍历,因此我不得不提出一些人为的示例,但是这里的要点是,您可以使用aggregate()将特定步骤的输出副作用成List您可以在遍历结束时将其cap()删除。


1
投票

我的建议是您当前的方法,实际上,我不认为这比其他解决方案要复杂得多。实际上,无论您添加多少分支,我都认为它非常简单。

g.V(1, 2, 3).fold().
  union(identity(),
        V(4, 5, 6).fold(),
        V(7, 8, 9).fold(),
        ...).unfold()
© www.soinside.com 2019 - 2024. All rights reserved.