Я хочу, чтобы двунаправленные отношения отображались между двумя узлами только один раз. - PullRequest
1 голос
/ 09 апреля 2019

У меня есть взвешенный график, некоторые узлы имеют двунаправленные отношения с одинаковым весом.Я хочу отображать эти узлы в табличной форме только один раз.

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1) 
RETURN  n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;

Result of this query, but I want to show me only one row

Этот код дает мне именно то, что мне нужно, но в двойных.

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

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Этот запрос похож на @ DaveBennett, но отфильтровывает строку, только если оба отношения имеют одинаковый вес:

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE r1.weight <> r2.weight OR ID(n1) > ID(n2)
RETURN n1.prefered_name, r1.weight, r2.weight, n2.prefered_name;

Кстати, он не интуитивен для n1 и n2 быть «потомками» друг друга.Если это сделано преднамеренно, вы можете изменить имя типа отношения на что-то менее запутанное.

2 голосов
/ 09 апреля 2019

Поскольку шаблон совпадает в обоих направлениях, вам просто нужно добавить предложение WHERE, чтобы ограничить вывод только возвратом совпадения в одном направлении.

MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE id(n1) > id(n2)
RETURN  n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...