Команда MERGE является комбинацией команды CREATE и команды MATCH.
Команда Neo4j CQL MERGE ищет заданный шаблон в графе. Если он существует, он возвращает результаты.
Если он НЕ существует в графе, то он создает новый узел / отношение и возвращает результаты.
В этой главе вы узнаете, как:
- Объединить узел с меткой
- Объединить узел со свойствами
- OnCreate и OnMatch
- Объединить отношения
Синтаксис
Ниже приведен синтаксис команды MERGE.
MERGE (node: label {properties . . . . . . . })
Прежде чем перейти к примерам в этом разделе, создайте два узла в базе данных с метками Dhawan и Ind. Создайте отношение типа «BATSMAN_OF» от Dhawan до Ind, как показано ниже.
CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) CREATE (Ind:Country {name: "India"}) CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)
Слияние узла с меткой
Вы можете объединить узел в базе данных на основе метки, используя предложение MERGE. Если вы попытаетесь объединить узел на основе метки, то Neo4j проверяет, существует ли какой-либо узел с данной меткой. Если нет, текущий узел будет создан.
Синтаксис
Ниже приведен синтаксис для объединения узла на основе метки.
MERGE (node:label) RETURN node
Пример 1
Ниже приведен пример Cypher Query, который объединяет узел в Neo4j (на основе метки). Когда вы выполняете этот запрос, Neo4j проверяет, есть ли какой-либо узел с проигрывателем меток. Если нет, он создает узел с именем «Jadeja» и возвращает его.
Если существует какой-либо узел с данной меткой, Neo4j возвращает их все.
MERGE (Jadeja:player) RETURN Jadeja
Для выполнения вышеуказанного запроса выполните следующие шаги:
Шаг 1 — Откройте настольное приложение Neo4j и запустите сервер Neo4j. Откройте встроенное приложение браузера Neo4j, используя URL-адрес http: // localhost: 7474 /, как показано на следующем снимке экрана.
Шаг 2 — Скопируйте и вставьте нужный запрос в подсказку доллара и нажмите кнопку воспроизведения (чтобы выполнить запрос), выделенную на следующем снимке экрана.
Результат
Выполнив, вы получите следующий результат. Поскольку вы уже создали узел с именем «Dhawan» с меткой «player» в базе данных, Neo4j возвращает его, как показано на следующем снимке экрана.
Пример 2
Теперь попробуйте объединить узел с именем «CT2013» с меткой «Tournament». Поскольку нет узлов с этой меткой, Neo4j создает узел с заданным именем и возвращает его.
MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) RETURN CT2013, labels(CT2013)
Для выполнения вышеуказанного запроса выполните следующие шаги:
Шаг 1 — Откройте настольное приложение Neo4j и запустите сервер Neo4j. Откройте встроенное приложение браузера Neo4j, используя URL-адрес http: // localhost: 7474 /, как показано на следующем снимке экрана.
Шаг 2 — Скопируйте и вставьте нужный запрос в подсказку доллара и нажмите кнопку воспроизведения (чтобы выполнить запрос), выделенную на следующем снимке экрана.
Результат
Выполнив, вы получите следующий результат. Как уже говорилось, поскольку нет узла с данным ярлыком (Турнир). Neo4j создает и возвращает указанный узел, как показано на следующем снимке экрана.
Слияние узла со свойствами
Вы также можете объединить узел с набором свойств. Если вы это сделаете, Neo4j выполнит поиск равного соответствия для указанного узла, включая свойства. Если он не находит, он создает.
Синтаксис
Ниже приведен синтаксис для объединения узла с использованием свойств.
MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . })
пример
Ниже приведен пример Cypher Query для объединения узла с использованием свойств. Этот запрос пытается объединить узел с именем «jadeja», используя свойства и метку. Поскольку нет такого узла с точной меткой и свойствами, Neo4j создает его.
MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) RETURN Jadeja
Для выполнения вышеуказанного запроса выполните следующие шаги:
Шаг 1 — Откройте настольное приложение Neo4j и запустите сервер Neo4j. Откройте встроенное приложение браузера Neo4j, используя URL-адрес http: // localhost: 7474 /, как показано на следующем снимке экрана.
Шаг 2 — Скопируйте и вставьте нужный запрос в подсказку доллара и нажмите кнопку воспроизведения (чтобы выполнить запрос), выделенную на следующем снимке экрана.
Результат
Выполнив, вы получите следующий результат. Как уже говорилось, поскольку нет узлов с указанными меткой и свойствами, он создает один, как показано на следующем снимке экрана.
OnCreate и OnMatch
Всякий раз, когда мы выполняем запрос на слияние, узел либо совпадает, либо создается. Используя on create и on match, вы можете установить свойства для указания того, создан ли узел или соответствует.
Синтаксис
Ниже приводится синтаксис предложений OnCreate и OnMatch .
MERGE (node:label {properties . . . . . . . . . . .}) ON CREATE SET property.isCreated ="true" ON MATCH SET property.isFound ="true"
пример
Ниже приведен пример Cypher Query, который демонстрирует использование предложений OnCreate и OnMatch в Neo4j. Если указанный узел уже существует в базе данных, то узел будет сопоставлен, и в узле будет создано свойство с парой ключ-значение isFound = «true».
Если указанный узел не существует в базе данных, то узел будет создан, и в нем будет создано свойство с парой ключ-значение isCreated = «true».
MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) ON CREATE SET Jadeja.isCreated = "true" ON MATCH SET Jadeja.isFound = "true" RETURN Jadeja
Для выполнения вышеуказанного запроса выполните следующие шаги:
Шаг 1 — Откройте настольное приложение Neo4j и запустите сервер Neo4j. Откройте встроенное приложение браузера Neo4j, используя URL-адрес http: // localhost: 7474 /, как показано на следующем снимке экрана.
Шаг 2 — Скопируйте и вставьте нужный запрос в подсказку доллара и нажмите кнопку воспроизведения (чтобы выполнить запрос), выделенную на следующем снимке экрана.
Результат
Выполнив, вы получите следующий результат. Как уже говорилось, поскольку нет узла с указанными деталями, Neo4j создал его вместе со свойством isFound, как показано на следующем снимке экрана.
Объединить отношения
Как и узлы, вы также можете объединить отношения, используя предложение MERGE.
пример
Ниже приведен пример Cypher Query, который объединяет отношения с помощью предложения MATCH в Neo4j. Этот запрос пытается объединить отношение с именем WINNERS_OF между узлами «ind» (метка: страна и название: Индия) и ICC13 (метка: турнир и имя: ICC Champions Trophy 2013).
Поскольку такого отношения не существует, Neo4j создает его.
MATCH (a:Country), (b:Tournament) WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013" MERGE (a)-[r:WINNERS_OF]->(b) RETURN a, b
Для выполнения вышеуказанного запроса выполните следующие шаги:
Шаг 1 — Откройте настольное приложение Neo4j и запустите сервер Neo4j. Откройте встроенное приложение браузера Neo4j, используя URL-адрес http: // localhost: 7474 /, как показано на следующем снимке экрана.
Шаг 2 — Скопируйте и вставьте нужный запрос в подсказку доллара и нажмите кнопку воспроизведения (чтобы выполнить запрос), выделенную на следующем снимке экрана.
Результат
Выполнив, вы получите следующий результат. Поскольку указанное отношение не существует в базе данных, Neo4j создает его, как показано на следующем снимке экрана.
Таким же образом, вы можете объединить несколько отношений и ненаправленных отношений тоже.