У меня есть две вершины:
1) Вершина 1: { id: 1, name: “john” }
2) Вершина 2: { id: 2, name: “mary” }
Существует ребро от 1 до 2 с именем «children».
Можно ли вернуть 2 вложенных в 1, используя gremlin, как это?
{
id: 1,
name: “john”,
children: { id: 2, name: “mary” }
}
Спасибо!
Мое решение с удивительной помощью @ noam621 ---------------------------------
g.V(1)
.union( valueMap(true),
project('children').by( coalesce( out('children').valueMap(true).fold() , constant([]))),
project('parents').by( coalesce( out('parents').valueMap(true).fold() , constant([])))
)
.unfold().group().by(keys).by(select(values))
Возвращает следующий объект:
{
id: 1,
name: [ “john” ],
children: [ { id: 2, name: [ “mary” ] } ],
parents: []
}
. Союз с проектом - это ключ для объединения всех объектов в один объект. valueMap (true) .fold () является фундаментальным для получения всех объектов в ребре, а объединение помогает со значением по умолчанию, если ребро не возвращает какую-либо вершину.
Из-за некоторых Azure ограничения Cosmos gremlin возможно получить значения только в виде значений массива. Таким образом, я завершил форматирование объекта в коде приложения. Пока все нормально.
Спасибо!