2016-05-17 13 views
1

Ich versuche, zwei CSVs mit identischen Strukturen aber unterschiedlichen Eigenschaftswerte einzugeben. Ich versuche, nur neue Knoten zu erstellen, bei denen die Eigenschaft 'name' nicht übereinstimmt. Was ich denke, ist, dass weil die vollständige Spalte (die ich nicht verwende, einzigartig ist, ignoriert sie die MERGE und nur einen neuen Knoten erstellt). Mein Code sieht wie folgt aus:neo4j Laden CSV mit Merge auf bestimmte Eigenschaft

LOAD CSV FROM 'https://s3.amazonaws.com.../inputSample.csv' AS line 
MERGE (e:Executable {system: line[0], location: line[1], name: line[2]}) 
MERGE (d:Dataset {system: line[3], group: line[4], name: line[5]}) 
CREATE (d)-[:input]->(e) 

LOAD CSV FROM 'https://s3.amazonaws.com/.../sampleOutput.csv' AS line 
MERGE (e:Executable {system: line[0], location: line[1], name: line[2]}) 
MERGE (d:Dataset {system: line[3], group: line[4], name: line[5]}) 
CREATE (e)-[:output]->(d) 

eine Probenleitung von der Eingangs:

A Projects/bmp bmp loc B ACCT 

Eine Probenleitung vom Ausgang:

B Projects/asp asp loc B ACCT 

Also nicht ich die zweite will die zweite d : Dataset erstellt in der Sekundärlast, weil diese Information bereits existiert, ist das sinnvoll?

Antwort

2

Sie versuchen, Knoten mit 3 verschiedenen Werten zu MERGE. So

(e:Executable {system: system1, location: location1, name: name1}) 

UND

(e:Executable {system: system1, location: location2, name: name1}) 

sind unterschiedlich.

Sie sollten nur eine Eigenschaft angeben, auf dem die anderen Eigenschaften zu fusionieren und SET danach:

LOAD CSV FROM 'https://s3.amazonaws.com.../inputSample.csv' AS line 
MERGE (e:Executable {name: line[2]}) 
ON CREATE SET e.system = line[0], e.location = line[1] 
MERGE (d:Dataset {name: line[5]}) 
ON CREATE SET e.system = line[3], d.location = line[4] 
CREATE (d)-[:input]->(e) 

LOAD CSV FROM 'https://s3.amazonaws.com/.../sampleOutput.csv' AS line 
MERGE (e:Executable {name: line[2]}) 
ON CREATE SET e.system = line[0], e.location = line[1] 
MERGE (d:Dataset {name: line[5]}) 
ON CREATE SET e.system = line[3], d.location = line[4] 
CREATE (d)-[:input]->(e) 
+0

In Ihrer Lösung die einzige ist dies die letzte Zeile CREATE werden soll (e) - [: output] -> (d) anders als danke! – theMadKing

+0

True, kopiere einfügen Probleme, Schuld auf mich –