Можете ли вы попробовать этот запрос:
MATCH (n:Giocatore)
WITH n.nome AS nome, collect(n) AS node2Merge
WITH node2Merge, extract(x IN node2Merge | x.match) AS matches
CALL apoc.refactor.mergeNodes(node2Merge) YIELD node
SET node.match = matches
Здесь я использую APOC для объединения узлов, но затем я делаю преобразование карты в списке узлов, чтобы получить массив match
, и я устанавливаю его на объединенном узле.
Я не знаю, много ли у вас Giocatore
узлов, поэтому, возможно, этот запрос вызовет исключение OutOfMemory, поэтому вам придется пакетировать ваш запрос. Например, вы можете заменить первую строку на MATCH (n:Giocatore) WHERE n.nome STARTS WITH 'A'
и повторять ее для каждой буквы, или вы также можете использовать процедуру apoc.periodic.iterate
:
CALL apoc.periodic.iterate(
'MATCH (n:Giocatore) WITH n.nome AS nome, collect(n) AS node2Merge RETURN node2Merge, extract(x IN node2Merge | x.match) AS matches',
'CALL apoc.refactor.mergeNodes(node2Merge) YIELD node
SET node.match = matches',
{batchSize:1000,parallel:true,retries:3,iterateList:true}
) YIELD batches, total