在 gremlin 中聚合项目结果

Aggregate project results in gremlin

我得到了一个样本组,可以通过以下 DSL 构建:

g.addV('M').property(id, 'm1')
g.addV('A').property('pka', 'x').addE('e1').to(V('m1'))
g.addV('A').property('pka', 'y').addE('e1').to(V('m1'))
g.addV('D').property('pkb', 'z').addE('e2').to(V('m1'))
g.addV('M').property(id, 'm2')
g.addV('A').property('pka', 'p').addE('e1').to(V('m2'))
g.addV('D').property('pka', 'q').addE('e1').to(V('m2'))

我想从'M'个顶点开始遍历,求出所有连通顶点的属性聚合结果。和现在一样,我可以使用:

g.V().hasLabel('M').
project('A', 'B').
    by(__.in('e1').values('pka').fold()).
        by(__.in('e2').values('pkb').fold())

获取结果:

==>[A:[x,y],B:[z]]
==>[A:[q,p],B:[]]

想要汇总这些结果并最终得到:

==>[A:[x,y,q,p],B:[z]]

感谢任何帮助。

您可以通过对结果进行分组来从原始查询中实现此目的:

g.V().hasLabel('M').
project('A', 'B').
by(__.in('e1').values('pka').fold()).
by(__.in('e2').values('pkb').fold()).
unfold().group().by(select(keys)).by(select(values).unfold().fold())

或者您可以在 project 步骤之前使用 fold

g.V().hasLabel('M').
fold().
project('A', 'B').
by(unfold().in('e1').values('pka').fold()).
by(unfold().in('e2').values('pkb').fold())

我在这里测试了两种解决方案:https://gremlify.com/2b