2017-07-08 3 views
0

現在、次のクエリを実行して、2つのノードとリレーションシップのプロパティを更新しています。Neo4Jと1つのクエリで複数のリレーションシップとノードを一致させて設定する

私は1,000のノードと対応する関係を1つのクエリで更新できるようにしたいと考えています。

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は使用しないでください)が含まれています。

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 

あなたがその仕事をするために人や車にユニーク制約を持つべきである注:たとえば

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

あなたのクエリは、次にようなものになるだろう。あなたは...非常に迅速にそのようにこのことができます

希望、 トムを何千人(百万もの)を行うことができます

+0

提案していただきありがとうございます。私たちは2k行のCSVファイルでLOAD CSVを試しました。 Neo4jはあまりにも長い間、私たちがあきらめた。 – Kainan

+0

ノードに一意の制約がありますか(そしてそれらを使用して一致を行いますか)?使用したLOAD CSVクエリを共有できますか?あなたがたくさんのフープを飛び越えていない限り、2k行は数秒で完了するはずです(それは最悪です)。 –

関連する問題