Neo4J Возможно ли и как сгруппировать все узлы с соответствующими значениями свойств по этим значениям? - PullRequest
0 голосов
/ 07 июля 2019

Скажем, у нас была небольшая документно-ориентированная БД (например, ElasticSearch), из которой мы создали содержимое нашей БД Neo4j.Каждый документ был о пользователе, изображающем его различные свойства (пол, банк, отдел, возраст, должность) ... Я хочу визуализировать все записи в Neo4J, группируя (связывая) пользователей по значениям свойств, которые являются одинаковыми.Таким образом, будут подключены все «женщины», а также все сотрудники отдела «Коррозия».Возможно ли и как сгруппировать все узлы с соответствующими значениями свойств по этим значениям?

1 Ответ

1 голос
/ 10 июля 2019

Чтобы визуализировать все узлы Female, просто запустите в браузере neo4j:

MATCH (n:User)
WHERE n.gender = 'Female'
RETURN n;

Нет необходимости избыточно соединять все Female узлы вместе.

Как правило, этот тип запроса будет выполняться быстрее, если вы также создадите соответствующий index . Например:

CREATE INDEX ON :User(gender);

[ОБНОВЛЕНИЕ 1]

Если вы хотите видеть каждую женщину User, которая является членом всех клубов, тогда вы можете иметь MEMBER_OF_CLUB отношения между User s и Club s и соответственно изменить запрос:

MATCH (c:Club)
WITH COUNT(c) AS clubCount
MATCH (n:User)
WHERE n.gender = 'Female' AND SIZE((n)-[:MEMBER_OF_CLUB]->()) = clubCount
RETURN n;

В этом запросе используется эффективная операция degreeness для проверки того, что число клубов, к которым принадлежит User, равно общему количеству клубов.

[ОБНОВЛЕНИЕ 2]

Чтобы увидеть всех женщин-членов каждого клуба (в котором есть женщины), просто используйте функцию агрегирования COLLECT:

MATCH (n:User)-[:MEMBER_OF_CLUB]->(club:Club)
WHERE n.gender = 'Female'
RETURN club, COLLECT(n) AS female_members;

[ОБНОВЛЕНИЕ 3]

Если вы действительно хотите, чтобы каждый узел User содержал список названий клубов (вместо наличия Club узлов и MEMBER_OF_CLUB отношений), это должно работать:

MATCH (n:User)
WHERE n.gender = 'Female'
UNWIND n.clubs AS club
RETURN club, COLLECT(n) AS female_members;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...