Neo4J - оператор слияния не создает новые узлы с отношением - PullRequest
0 голосов
/ 30 ноября 2018

Я написал запрос, который создает 2 новых узла, если он существует, тогда он просто обновляет свойства и добавляет связь между ними.

Впервые при созданииузлы и отношения все идет хорошо.

// This is the first run

MERGE (Kunal:PERSON)
ON CREATE SET
    Kunal.name = 'Kunal',
    Kunal.type = 'Person',
    Kunal.created = timestamp()
ON MATCH SET
    Kunal.lastUpdated = timestamp()
MERGE (Bangalore: LOC)
ON CREATE SET
    Bangalore.name = 'Bangalore',
    Bangalore.type = 'Location',
    Bangalore.created = timestamp()
ON MATCH SET
    Bangalore.lastUpdated = timestamp()
MERGE (Kunal)-[r1:LIVES_IN]->(Bangalore)
RETURN * 

enter image description here

Здесь я добавляю узел Кунал (узел)кто живет в (родстве) Бангалор (узел).В первый раз все нормально.


В следующий раз я добавляю другой узел следующим образом:

// Next time

MERGE (John:PERSON)
ON CREATE SET
    John.name = 'John',
    John.type = 'Person',
    John.created = timestamp()
ON MATCH SET
    John.lastUpdated = timestamp()
MERGE (Bangalore: LOC)
ON CREATE SET
    Bangalore.name = 'Bangalore',
    Bangalore.type = 'Location',
    Bangalore.created = timestamp()
ON MATCH SET
    Bangalore.lastUpdated = timestamp()
MERGE (John)-[r1:LIVES_IN]->(Bangalore)
RETURN *

Я добавляю узел Джон кто живет в (отн.) Бангалор (узел).

enter image description here


Но проблема здесь, он снова принимает то же значение узла из предыдущего оператора слияния.

Кто-нибудь может это объяснить?

Также, каково решение для этого, если, скажем, если мы выполняемПриведенные выше запросы объединить внутри цикла с использованием драйвера Python.

Не могу найти ничего по этому поводу, хотя

1 Ответ

0 голосов
/ 30 ноября 2018

Причина:

Причина кроется в вашей схеме сопоставления первого и второго оператора MERGE.Потому что они только проверяют наличие Label Person и Loc, но не конкретного узла Person с именем Kunal.

Идея:

As @Логисима уже объяснил в комментариях к этому ответу :

«Вы всегда должны использовать MERGE для первичного ключа (с ограничением индекса / уникальности для него)».

Решение:

Вы должны сопоставить конкретный, уникальный узел путем фильтрации, например, {name: 'your content'} или WHERE id(kunal)=1234.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...