Neo4J Match&在一个查询中设置多个关系/节点

时间:2017-07-08 07:31:43

标签: neo4j cypher

我目前正在运行以下查询来更新两个节点和关系的属性。

我希望能够在一个查询中更新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'

此查询在您大量运行时会出现问题。还有更好的方法吗?

谢谢。

1 个答案:

答案 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有唯一的约束来使其工作。你很快就可以成千上万(甚至数百万)......

希望这有帮助, 汤姆