2016-05-02 5 views
2

Ich habe gerade Neo4j 3.0.0 vor etwa zehn Minuten heruntergeladen und installiert. Ich erstelle eine Graphdatenbank mit Neo4j.'Hier kann kein Knoten mit Beschriftungen oder Eigenschaften erstellt werden. Die Variable ist bereits in diesem Zusammenhang 'in Neo4j

Wenn ich versuche, auf einmal 3 Anweisungen ausgeführt werden, erhalte ich eine Fehlermeldung:

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

(Dies ist, wo ich in einem Definitionsknoten zu setzen bin versucht).

Ich bin mir nicht sicher, was das Problem ist. Mein erster Gedanke war, dass ich Variablen über Blöcke hinweg mitnehmen muss, da ich dieses Problem schon früher hatte, aber das scheint ein anderer Fall zu sein (Entschuldigung, ich bin noch neu bei Neo4j).

Betrachtet man, was mit famA vor sich geht, wird es nur einmal deklariert, und es scheint, als wäre die Syntax in Ordnung? Es ist alles in Ordnung hier:

// Create the definition node: 
CREATE 
    (famA:Family {family_ID:'A'}) 
    WITH famA 
    MATCH (a:Person {name:"a"})-[*]-(b:Person) 
    MERGE (famA:Family)<-[:FAMILY]-(a) 
    MERGE (famA:Family)<-[:FAMILY]-(b) 

Ich mag auch darauf hinweisen, mein Skript feinen letzte Woche gearbeitet - vielleicht ist das ein Problem mit einer neuen Version?

Hat jemand irgendwelche Ideen? Vielen Dank.

Hier ist der Code die db zu erstellen:

// First family: family_ID = A. This family has 3 members with Alzheimers who are not alive, and more than half of them are Left handed 
CREATE 
    ( a:Person {name: 'a', id:'1', Gender:'Male', Diagnosis: 'Alzheimers', `Is Alive?`: 'No', Handedness: 'Left', `Risk Score`: 'PURPLE'}), 
    (aSP:Person {name: 'aSP', id:'2', Gender:'Female', Diagnosis: 'Alzheimers', `Is Alive?`: 'No', Handedness: 'Left', `Risk Score`: 'GIRAFFE'}), 
    ( b:Person {name: 'b', id:'3', Gender:'Male', Diagnosis: 'Normal',  `Is Alive?`: 'No', Handedness: 'Left', `Risk Score`: 'PURPLE'}), 
    (bSP:Person {name: 'bSP', id:'4', Gender:'Female', Diagnosis: 'Alzheimers', `Is Alive?`: 'No', Handedness: 'Right', `Risk Score`: 'GIRAFFE'}), 
    (bSib:Person {name: 'bSib', id:'5', Gender:'Female', Diagnosis: 'MCI',  `Is Alive?`: 'No', Handedness: 'Left', `Risk Score`: 'GIRAFFE'}), 
    ( c:Person {name: 'c', id:'6', Gender:'Male', Diagnosis: 'MCI',  `Is Alive?`: 'No', Handedness: 'Right', `Risk Score`: 'PURPLE'}), 
    (cSib:Person {name: 'cSib', id:'7', Gender:'Female', Diagnosis: 'Alzheimers', `Is Alive?`: 'Yes', Handedness: 'Left', `Risk Score`: 'GIRAFFE'}) 

CREATE 
    (a)-[:SPOUSE]->(aSP), 
    (b)-[:CHILD]->(a), 
    (b)-[:CHILD]->(aSP), 
    (b)-[:SPOUSE]->(bSP), 
    (bSib)-[:SIBLING]->(b), 
    (bSib)-[:CHILD]->(aSP), 
    (c)-[:CHILD]->(b), 
    (c)-[:CHILD]->(bSP), 
    (cSib)-[:SIBLING]->(c), 
    (cSib)-[:CHILD]->(bSP) 

// Create the definition node: 
CREATE 
    (famA:Family {family_ID:'A'}) 
    WITH famA 
    MATCH (a:Person {name:"a"})-[*]-(b:Person) 
    MERGE (famA:Family)<-[:FAMILY]-(a) 
    MERGE (famA:Family)<-[:FAMILY]-(b) 

Antwort

2

Remove Label aus famA merge (wenn Sie die merge mit dem Label verwenden - es ist ein Hinweis auf die Knoten Schöpfung sein wird, aber dieser Knoten erstellt vorher):

// Create the definition node: 
CREATE 
    (famA:Family {family_ID:'A'}) 
    WITH famA 
    MATCH (a:Person {name:"a"})-[*]-(b:Person) 
    MERGE (famA)<-[:FAMILY]-(a) 
    MERGE (famA)<-[:FAMILY]-(b) 
0

ich hatte eine ähnliche Situation, wo ich das ändern musste:

MATCH (ks1:KbWordSequence) 
MATCH (ks2:KbWordSequence {kbidseq: ks1.kbidseqnxt}) 
CREATE (ks1)-[:NEXT]->(ks2) 
MERGE (ks1:KbWordSequence)-[:NEXT]->(ks2:KbWordSequence {kbidseqnxt: ks1.kbidseq}) 

dazu:

MATCH (ks1:KbWordSequence) 
MATCH (ks2:KbWordSequence {kbidseq: ks1.kbidseqnxt}) 
CREATE (ks1)-[:NEXT]->(ks2) 
MERGE (ks1)-[:NEXT]->(ks2) 
     SET ks2.kbidseqnxt = ks1.kbidseq 

Im Grunde war ich nicht Knoten erlaubte Werte in der zweiten MERGE-Anweisung eingestellt, ich hatte eine SET auf diesem merge hinzuzufügen.

Verwandte Themen