Подсчитать двунаправленные ребра между двумя узлами на всем графике - PullRequest
0 голосов
/ 25 марта 2019

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

START n1=node(*), n2=node(*)
MATCH (n1)-[r:HAS_CHILD]-(n2) where (n1)-[r]->(n2)and (n1)<-[r]-(n2)
RETURN n1,r,n2 limit 10;

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

Iожидать, что между узлами не будет двунаправленных связей, основанных на числе от ребра.Если у меня есть (n) - [r {weight: 2}] -> (m) и (n) <- [r {weight: 4}] - (m), то оставшимся ребром будет тот, который имеет вес 4.</p>

1 Ответ

0 голосов
/ 25 марта 2019

Отношения не являются двунаправленными в Neo4j, поэтому в этом случае есть два разных отношения.

Но вы пытаетесь сопоставить одно отношение в предложении WHERE, которое направлено как на n1, так и на n2, что возможно только в том случае, если n1 и n2 являются одинаковыми узлами, поэтому он отображает узлы, имеющие отношение к себе.

Попробуйте это:

Отнесите отношение от n1 к n2 как r1 И отношение от n2 к n1 как r2 и сравните их

MATCH (n1)-[r1:HAS_CHILD]->(n2)-[r2:HAS_CHILD]->(n1) 
RETURN n1,r1,r2,n2 limit 10;

Надеюсь, что это поможет вам.

РЕДАКТИРОВАТЬ:

Сравнить вес отношения перед удалением.

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