Вы можете попробовать что-то вроде этого:
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
Но этот запрос вообще не работает, потому что вы работаете над всем графиком и, вероятно, поместите всю свою базу данных в оперативную память.
Таким образом, вы должны пакетировать этот запрос:
MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0
WITH n LIMIT 1000
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
RETURN count(*)
Вы можете выполнить этот запрос снова и снова, пока его результат не будет 0. И если вы ленивы, в APOC есть процедура, чтобы сделатьчто:
call apoc.periodic.commit("
MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0
WITH n LIMIT $limit
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
RETURN count(*)", {limit: 1000});