Карта значений Гремлина с массивом граней

Я пытаюсь запросить вершину с помощью 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

Другие вопросы по тегам