Как создать несколько списков в neo4j - PullRequest
0 голосов
/ 11 сентября 2018

Мне было интересно, возможно ли следующее с Neo4j.

Предположим, у меня есть класс узлов, скажем (событие: событие), тогда как каждое событие имеет свойство тегов ([String]). Теперь я могу вернуть все эти массивы просто так:

MATCH (event:Event) RETURN event.tags

Однако я пока не понимаю, как я мог бы объединить выходные данные для разных результатов узла, которые будут собраны в одном списке. Такое возможно с Cypher? Конечно, всегда можно решить эту проблему программным путем, но, насколько я понимаю, Cypher предлагает как уменьшение, так и добавление собственных списков.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Картографическая проекция может выполнять большую часть того, что вы просите.

карта проекционной документации Вы можете начать с узла и добавить к нему.

MATCH (user:User)-[:TRIGGERED]->(event:Event) WITH event {.*, user_id:user.user_id} as user_event

Это даст вам массив событий с добавленным параметром user_id.

0 голосов
/ 11 сентября 2018

Если вы можете использовать Библиотека APOC , используйте flatten функцию для коллекций:

MATCH (event:Event) 
RETURN apoc.coll.flatten(COLLECT(event.tags))

COLLECT(event.tags) объединит все результаты в один список (список списков тегов)

apoc.coll.flatten(..) сведет список списков в один список

Если по какой-то причине вы не можете использовать APOC, используйте reduce:

MATCH (event:Event) 
RETURN REDUCE(s = [], tags IN COLLECT(event.tags) | s + tags)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...