Обновите все свойства моего узла, указав количество связей с этим узлом и с него. - PullRequest
0 голосов
/ 05 января 2019

Итак, я думал о чем-то одном:

MATCH (a: Entity) <- (x: Entity) SET a.links_to = count (x) MATCH (a: Entity) -> (x: Entity) SET a.links_from = count (x)

Как я могу написать это правильно в Cypher? Как я могу сделать это быстрым и предпочтительно параллельным способом, возможно, используя Apoc?

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Это можно сделать очень эффективно с помощью.

Match (e:Entity)
Set e.links_to = size((e)<--()),
      e.links_from = size((e)-->())

Если вы хотите использовать APOC для ускорения и параллельной работы

Call apoc.periodic.iterate(
' match (e:Entity) return e',
' set e.links_to = size((e)<--()),
      e.links_from = size((e)-->())',
{batchSize:10000,parallel: true})
0 голосов
/ 06 января 2019

Отличные отзывы. Решение Apoc работает особенно хорошо. Большое спасибо!

0 голосов
/ 06 января 2019

Это дорогостоящая операция, но если вы хотите это сделать, вот запрос для шифра:

match (a)-[]->(b) 
with a, b, 
CASE WHEN exists(a.outgoingEdges) THEN a.outgoingEdges+1 else 1 END as outgoingEdges,
CASE WHEN exists(b.incomingEdges) THEN b.incomingEdges+1 else 1 END as incomingEdges
SET
 a.outgoingEdges= outgoingEdges,
 b.incomingEdges = incomingEdges
...