2016-08-05 27 views
0

Dies kann eine dumme Möglichkeit sein, dies zu tun. Ich möchte eine Kette von Knoten erstellen, möglicherweise Tausende von ihnen in der folgenden Form:Variablen von einer Abfrage zu einer anderen tragen, um verkettete Knoten mit Chiffre zu erstellen

(n0)-[r0]->(n1)-[r1]->(n2)... 

Ich habe Chiffre programmatisch erzeugt, die etwa wie folgt aussieht:

MERGE (n0:Person)-[r0:RelType]->(n1:Person) 
WITH n1 MERGE (n1:Person)-[r1:RelType]->(n2:Person) 
WITH n2 MERGE (n2:Person)-[r2:RelType]->(n3:Person) 
WITH n3 MERGE (n3:Person)-[r3:RelType]->(n4:Person) 
WITH n4 MERGE (n4:Person)-[r4:RelType]->(n5:Person) 
... 

ich dann über Abfragen eingefügt Kopie in Neo4j Webkonsole und lief, aber es gab folgende Fehler:

Can't create node `n1` with labels or properties here. The variable is already declared in this context 

ich verstehe (oder mich nicht?) wir nicht MERGE innerhalb WITH verwenden können. Außerdem weiß ich, dass wir Knoten, Beziehungen aus CSV mit Neo4jImport in Großmengen importieren können. Aber ich war nur neugierig, wenn wir eine Reihe von cyphers zum Kopieren erstellen können, fügen Sie sie in neo4j Webkonsole ein und erstellen Sie das gewünschte Diagramm.

Antwort

0

Ich denke, Sie sollten das Etikett entfernen, wenn die Beziehung auf der n1 über die WITH geliefert Knoten verschmelzenden

MERGE (n0:Person)-[r0:RelType]->(n1:Person) 
WITH n1 MERGE (n1)-[r1:RelType]->(n2:Person) 
WITH n2 MERGE (n2)-[r2:RelType]->(n3:Person) 
WITH n3 MERGE (n3)-[r3:RelType]->(n4:Person) 
WITH n4 MERGE (n4)-[r4:RelType]->(n5:Person) 

(ungetestet)

1

@Luanne auf dem richtigen Weg ist, aber ich denke, das ist, was Sie wollen:

CREATE (n1:Person) 
WITH n1 AS n CREATE (n)-[:RelType]->(n1:Person) 
WITH n1 AS n CREATE (n)-[:RelType]->(n1:Person) 
WITH n1 AS n CREATE (n)-[:RelType]->(n1:Person) 
WITH n1 AS n CREATE (n)-[:RelType]->(n1:Person) 

(and so on...) 

Bis auf die erste Zeile sind alle anderen Zeilen identisch. Ich habe CREATE verwendet, weil ich glaube nicht, dass Sie überhaupt MERGE verwenden möchten, da ich glaube, dass Sie versuchen, völlig neue Daten zu erstellen. Sie können stattdessen MERGE verwenden, wenn ich falsch liege.

2

Wenn das einzige, was Sie wollen, eine lange Kette von Knoten zu erstellen, können Sie entspannen nur eine Auswahl:

CREATE INDEX ON :Person(id) 

UNWIND range(1,100) AS i 
MERGE (p:Person {id: i-1}) 
MERGE (p2:Person {id: i}) 
MERGE (p)-[:RelType]->(p2) 

enter image description here