Получить информацию о свойствах вершины в простом формате

Допустим, у меня есть два узла "A" и "B" на графике, причем каждый узел имеет свойства "name" (строка) и "roll-no" (int). Как я могу написать запрос, чтобы получить информацию о свойствах узла в следующем формате. Обратите внимание, что мне не нужна информация о типе данных и вложенная структура json в выходных данных.

[{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}]

Я думаю, что я спрашиваю, как конвертировать GraphSON в обычный JSON.

1 ответ

Решение

Вы можете project() элемент в Map:

gremlin> g.V(1).project('name','age').by('name').by('age')
==>[name:marko,age:29]

Как вы можете видеть, использование этого подхода позволяет вам контролировать, как карта создается более детально, так как вы управляете свойствами в by() ступенчатые модуляторы. Если возвращенные вершины не имеют однородных ключей свойств, вам нужно будет каким-то образом учесть это - вот одна из возможностей:

gremlin> g.V().project('name','age').
......1>   by('name').
......2>   by(coalesce(values('age'),constant('none')))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,age:none]
==>[name:josh,age:32]
==>[name:ripple,age:none]
==>[name:peter,age:35]

Без использования проекта вы также можете сделать что-то вроде этого:

gremlin> g.V().local(properties().group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,lang:java]
==>[name:josh,age:32]
==>[name:ripple,lang:java]
==>[name:peter,age:35]

Не так ясно, как project() и получит все свойства, которые обычно не рекомендуется, но, очевидно, этот подход будет работать. Я думаю, вы могли бы перечислить свойства, чтобы получить, как показано ниже:

gremlin> g.V().local(properties('name','age').group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop]
==>[name:josh,age:32]
==>[name:ripple]
==>[name:peter,age:35]
Другие вопросы по тегам