Замена отношений из одного узла в другой одним отношением - PullRequest
1 голос
/ 17 апреля 2019

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

Теперь я хотел бы заменить эти несколько отношений между двумя узлами одним единственным отношением. Было бы здорово, если бы мы могли сохранить количество отношений внутри свойства, «рассчитывающих» на новое уникальное отношение.

Каким был бы эффективный способ решения этой проблемы? У меня около 100 000 отношений, и я немного беспокоюсь о том, сколько времени это займет.

Вот краткий пример, чтобы прояснить проблему: У меня есть:

Node A -- R1 -- Node B
Node A -- R2 -- Node B

И я бы хотел иметь

Node A -- R {count : 2} -- Node B

Спасибо!

1 Ответ

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

Я предполагаю, что эти отношения не имеют каких-либо свойств, и Направление отношений не имеет значения.

Вы можете объединить эти отношения с Cypher Query, как показано:

MATCH (p:Node)-[r]-(c:Node)
WHERE ID(p) > ID(c)
DELETE r
WITH p, c, COUNT(r) as count
CREATE (p)-[:R{count:count}]->(c)

Если вы хотите объединить отношения, имеющие одни и те же направления, вы можете использовать следующий запрос:

MATCH (p:Node)-[r]->(c:Node)
DELETE r
WITH p, c, COUNT(r) as count
CREATE (p)-[newrel:R{count:count}]->(c)

Если вы также хотите объединить свойства, вы можете воспользоваться помощью apoc-плагин apoc.refactor.mergeRelationships метод.

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