Neo4J возвращает узел дважды при сопоставлении с другим узлом - PullRequest
0 голосов
/ 27 марта 2019

Я хочу получить значения (2 набора значений) из двух отношений, имеющих общий узел, а затем вернуть все наборы.

Я пробовал этот код, но для первого набора, который имеет только один результат, он дублирует его из-за второго набора, который имеет два результата.

MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"}) 
- [:CONTAINS] -> (cti2:CollaborativeTaskInstance) return sti, cti2

Вот результат

enter image description here

Мы видим, что sti дублируется, в то время как он должен возвращать только один результат.

Я также пытался использовать коллекцию (отличный стиль) на съемочной площадке, которую я не хочу дублировать, но она все еще не работает. Любое предложение приветствуется.

1 Ответ

1 голос
/ 27 марта 2019

В Cypher вы получите ряды результатов в зависимости от всех возможных путей, которые соответствуют шаблону.В вашем случае были найдены два пути, которые соответствуют шаблону, но оба они имеют одинаковый узел sti, поэтому вы видите, что он появляется дважды.Это по замыслу.Результаты не группируются неявно, вам нужно сделать это самостоятельно, используя функции агрегирования.

Если вы хотите собирать узлы cti для каждого отдельного узла sti, вам нужно будет выполнить метод collect () следующим образом:

MATCH (sti:SingleTaskInstance) <- [:CONTAINS] - (cti:CollaborativeTaskInstance {cti_id: "RD1CT"}) - [:CONTAINS] -> (cti2:CollaborativeTaskInstance)
RETURN sti, collect(DISTINCT cti2)

Мы собираем отдельные узлы cti2 на тот случай, если узел cti2 доступен несколькими узлами cti (в противном случае он может появиться несколько раз).Когда вы агрегируете, переменные не агрегации становятся разными, поэтому вы получаете разные узлы sti благодаря агрегации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...