編輯
在第二次看,好像你想實現某種條件邏輯到您的插入。
它看起來像你想要做的是弄清楚,如果一個人存在與一個UID(從row.player_cardnum一些串聯派生),並在這種情況下:人不存在和匹配失敗,MERGE
a:具有由row.player_cardnum給出的CardNumber的人員。
如果這是您的目標,那麼您幾乎與您的查詢在那裏。問題在於你的WHERE
條款。
瞭解WHERE
子句與前面的MATCH
,OPTIONAL MATCH
或WITH
相鏈接,並且僅影響鏈接的子句。
對於那個OPTIONAL MATCH
上的那個WHERE
,每個將始終爲空,但更重要的是,您的行仍然存在,並且以下MERGE
將始終發生在CSV中的所有行。這可能是您放緩的原因,因爲它正在爲所有行創建新的:Person節點。
如果你想完全空出一行時,在現有的OPTIONAL MATCH
點擊:人(所以MERGE
不會在這種情況下發生),你需要添加一個WITH
條款,並確保您的WHERE
子句適用於它而不是OPTIONAL MATCH
。
此外,請確保您對Person.UID和Person.CardNumber具有唯一約束或索引。至於UID匹配,我聽說索引不是在你匹配的東西的某種字符串連接時使用的,所以你可能需要先將它組合起來,然後用WITH
傳遞它。
你最終的查詢應該是這樣的:
USING PERIODIC COMMIT 5000
LOAD CSV WITH HEADERS
FROM "file:///my_sds_39_joe.csv"
AS row
// first build the UID so we can take advantage of the index
WITH row, "Person." + row.player_cardnum AS UID
OPTIONAL MATCH (per:Person {UID : UID})
// the WHERE now applies to the WITH, which will filter out and null out the row when an OPTIONAL MATCH is found
WITH row, per
WHERE per IS NULL
MERGE (p:Person {CardNumber : row.player_cardnum})
ON CREATE SET p.Creation Date = timestamp(), p.Modification Date = timestamp() ;
你如何加載數據? –
我正在使用來自neo4j-shell的Load CSV命令。 – user2813165
@ user2813165請務必通過*編輯您的問題*來添加詳細信息,而不是通過在評論中嵌入(特別是代碼/查詢,這些評論相當難以理解)。我編輯了你的問題以包含評論中的csv-load,所以你應該現在刪除評論。 –