2016-09-24 110 views
0

我有以下查詢創建人節點 -Neo4j的CSV導入 - 創建或更新

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "http://192.168.11.121/movie-reco-db/person_node.csv" as row 
CREATE (:Person {personId: row.person_id, name: row.name}); 

我設置索引上PERSONIDperson_node.csv是我從MySql數據庫中導出的文件,這個查詢工作正常,但問題是CSV文件將在每次我導出時有新的記錄,如果我再次運行此查詢,那麼它正在創建重複節點,如果我設置UNIQUE索引上personId那麼它說 -

Node 0 already exists with label Person and property "personId"=[1] 

並且不插入新記錄。那麼是否有任何優雅的方式來更新記錄(如果已經存在)或者創建新記錄(如果沒有)

回答

1

您正在尋找MERGE操作,該操作會嘗試匹配,如果找不到它,它將創建它。請注意,如果您正在合併的東西不存在(例如,將節點與personId和名稱合併,但現有節點具有該personId但名稱略有不同),則會創建該節點。

如果你有一個唯一的ID節點,在該合併,然後使用ON CREATE添加其餘屬性(ON CREATE只有當MERGE導致創建而不是匹配您的數據庫中的現有實體的創建時執行,還有另一個命令ON MATCH只在匹配而不是創建時才被執行)。

你最終的查詢看起來像:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "http://192.168.11.121/movie-reco-db/person_node.csv" as row 
MERGE (p:Person {personId: row.person_id}) 
ON CREATE SET p.name = row.name;