在 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
我得到了一个样本组,可以通过以下 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