我目前正在运行以下查询来更新两个节点和关系的属性。
我希望能够在一个查询中更新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 :(得分: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
请注意,您应该对Person和Car有唯一的约束来使其工作。你很快就可以成千上万(甚至数百万)......
希望这有帮助, 汤姆