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

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

Для добавления узла я проверяю, существует ли узел или нет,если он существует, я просто собираюсь установить свойство.

// Query 1 for creating or updating node 1

MERGE (Kunal:PERSON)
ON CREATE SET
    Kunal.name = 'Kunal',
    Kunal.type = 'Person',
    Kunal.created = timestamp()
ON MATCH SET
    Kunal.lastUpdated = timestamp()
RETURN Kunal

// Query 2 for creating or updating node 2

MERGE (Bangalore: LOC)
ON CREATE SET
    Bangalore.name = 'Bangalore',
    Bangalore.type = 'Location',
    Bangalore.created = timestamp()
ON MATCH SET
    Bangalore.lastUpdated = timestamp()
RETURN Bangalore

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

// Query 3 for creating relation or updating it.

MERGE (Kunal: PERSON { name: 'Kunal', type: 'Person' })
MERGE (Bangalore: LOC { name: 'Bangalore', type: 'Location' })
MERGE (Kunal)-[r:LIVES_IN]->(Bangalore)
ON CREATE SET
    r.duration = 36
ON MATCH SET
    r.duration = r.duration + 1 
RETURN *

Проблема состоит в том, что это 3 отдельных запроса, которые будут иметь 3 обращения к базе данных, когда я буду запускать его через драйвер Python.Есть ли способ оптимизировать эти запросы в один запрос.

1 Ответ

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

Конечно, вы можете объединить ваши три запроса в один.В этом случае вы можете пропустить первый и второй MERGE вашего последнего запроса, поскольку он уже гарантирован началом нового запроса.

MERGE (kunal:PERSON {name: ‘Kunal'})
ON CREATE SET
    kunal.type = 'Person',
    kunal.created = timestamp()
ON MATCH SET
    kunal.lastUpdated = timestamp()
MERGE (bangalore:LOC {name: 'Bangalore'})
ON CREATE SET
    bangalore.type = 'Location',
    bangalore.created = timestamp()
ON MATCH SET
    bangalore.lastUpdated = timestamp()
MERGE (kunal)-[r:LIVES_IN]->(bangalore)
ON CREATE SET
    r.duration = 36
ON MATCH SET
    r.duration = r.duration + 1 
RETURN *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...