Совокупные результаты проекта в гремлине - PullRequest
0 голосов
/ 04 марта 2020

Я получил группу выборок, которая может быть построена с помощью следующей 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]]

Любая помощь оценены.

1 Ответ

4 голосов
/ 04 марта 2020

Вы можете добиться этого из исходного запроса, сгруппировав результаты:

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())

Или вы можете использовать fold до шага project:

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

...