簡體   English   中英

Cypher合並具有相同屬性的節點並收集其他屬性

[英]Cypher merge nodes with same property and collected the other property

我有這種結構的節點

(g:Giocatore { nome, match, nazionale})

(nome:'Del Piero', match:'45343', nazionale:'ITA')
(nome:'Messi', match:'65324', nazionale:'ARG')
(nome:'Del Piero', match:'18235', nazionale:'ITA')

屬性“ match”是唯一的(匹配的ID),而有多個“ nome”具有相同的名稱。 我想將所有節點合並為相同的“ nome”,並創建一個不同的“ match”集合,如下所示

(nome:'Del Piero', match:[45343,18235], nazionale:'ITA')
(nome:'Messi', match:'65324', nazionale:'ARG')

我也嘗試過apoc庫,但是沒有任何效果。 任何想法?

您可以嘗試以下查詢:

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'替換為第一行,其中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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM