Карта значений Гремлина с массивом граней
Я пытаюсь запросить вершину с помощью Node Gremlin и AWS Neptune о ее свойствах и получить все вершины, связанные с ней "выходным" ребром, а также все их свойства на одном выходе. Например, если у меня есть вершина Baker с ребром, которое "запекается" до двух вершин Cake, я хочу получить объект Baker со всеми его свойствами, а также массив на нем из двух Cake. вершины как объекты со всеми их свойствами.
Я знаю, что могу эффективно сделать это с помощью.project, но я не хочу выбирать конкретные свойства для каких-либо вершин, потому что мне нужны все их свойства.
В настоящее время я работаю с таким запросом:
g.V(BakerId).as('Baker').out('bakes').as('Cake').select('Baker','Cake').by(valueMap(true))
, но проблема в том, что этот запрос дает мне список из двух выходных данных: один с Baker и первым Cake, а другой с тем же Baker и вторым тортом. Я хочу избежать дублирования и объединить его в один вывод с появлением Baker только один раз.
Я также надеюсь на решение, достаточно универсальное (или достаточно простое, чтобы его можно было легко расширить), чтобы справиться с переходом еще на уровень глубже, чтобы сделать то же самое с 'выходными' краями на вершинах 'Cake', например 'Cake' -> 'madeOf' -> "Ингредиент", чтобы я мог получить одного пекаря с каждым пирогом только один раз, каждый с каждым ингредиентом, только один раз, и все со всеми их свойствами.
1 ответ
Вы можете использовать два
project
шаги и использование
valueMap
поэтому вам не нужно указывать свойства:
g.V().hasLabel('Baker').
project('Baker', 'Cake').
by(valueMap(true)).
by(out('bakes').
project('Cake', 'Ingredients').
by(valueMap(true)).
by(out('madeOf').valueMap(true).
fold()).fold())
пример: https://gremlify.com/34e9o3r9gag