2017-07-08 62 views
0

我正在運行以下查詢來更新兩個節點和關係上的屬性。Neo4J在一個查詢中匹配並設置多個關係/節點

我希望能夠在一個查詢中更新1,000個節點和相應的關係。

MATCH (p1:Person)-[r1:OWNS_CAR]->(c1:Car) WHERE id(r1) = 3018 
MATCH (p2:Person)-[r2:OWNS_CAR]->(c2:Car) WHERE id(r2) = 3019 
SET c1.serial_number = 'SERIAL027436', c1.signature = 'SIGNATURE728934', 
r1.serial_number = 'SERIAL78765', r1.signature = 'SIGNATURE749532', 
c2.serial_number = 'SERIAL027436', c2.signature = 'SIGNATURE728934', 
r2.serial_number = 'SERIAL78765', r2.signature = 'SIGNATURE749532' 

此查詢在大量運行時遇到問題。有沒有更好的辦法?

謝謝。

+0

你能解釋一下你所說的「數量較多,」運行它是什麼意思?請更新您的描述以給出有問題的查詢的示例。 – InverseFalcon

回答

1

您可以使用LOAD CSV。您的輸入將包含Person和Car的密鑰(不是id,不建議使用id),以及您需要設置的任何屬性。例如

personId, carId, serial_number, signature 
00001, 00045, SERIAL78765, SIGNATURE728934 
00002, 00046, SERIAL78665, SIGNATURE724934 

您的查詢就會再是這樣的:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///input.csv' AS row 
MATCH (p:Person {personId: row.PersonId})-[r:OWNS_CAR]->(c:Car {carId: row.carId}) 
SET r.serial_number = row.serialnumber, c.signature = row.signature 

請注意,您應該對人與車唯一約束,使這項工作。你可以做成千上萬(甚至上百萬),這樣的速度非常快...

希望這有助於 湯姆

+0

感謝您的建議。我們用2k行的CSV文件嘗試了一個LOAD CSV。 Neo4j花了這麼長時間,我們放棄了。 – Kainan

+0

你對節點有獨特的限制嗎(並用它們來完成匹配)?你能分享你使用的LOAD CSV查詢嗎?除非你跳過很多圈,否則2k行應該在幾秒鐘內完成(這是最糟糕的情況)。 –

相關問題