2016-05-02 1 views
2

Я только что скачал и установил Neo4j 3.0.0 около десяти минут назад. Я создаю базу данных графа с Neo4j.«Невозможно создать узел с метками или свойствами здесь. Переменная уже объявлена ​​в этом контексте 'in Neo4j

Когда я пытаюсь запустить 3 заявления на этот раз, я получаю сообщение об ошибке:

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

(Это где я пытаюсь поставить в узел определения).

Я не уверен, в чем проблема. Моя первая мысль заключалась в том, что мне нужно переносить переменные между блоками, так как раньше у меня была эта проблема, но это похоже на другой случай (извините, я все еще новичок в Neo4j).

Глядя на то, что происходит с famA, он объявляется только один раз, и похоже, что синтаксис в порядке? Это все прямо здесь:

// 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) 

Я также хочу отметить, мой сценарий работал отлично на прошлой неделе - может быть, это какая-то проблема с новой версией?

У кого-нибудь есть идеи? Благодарю.

Вот код для создания БД:

// 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) 

ответ

2

Удалить ярлык из famA merge (если вы используете merge с меткой - это будет свидетельствовать о создании узла, но этот узел ранее созданный):

// 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

у меня была похожая ситуация, когда я должен был изменить это:

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

к этому:

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

В принципе я не разрешен устанавливать значение узлов во втором заявлении MERGE, мне пришлось добавить SET на этом слиянии.

Смежные вопросы