Учебники

Neo4j — объединить команду

Команда 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 возвращает его, как показано на следующем снимке экрана.

Dhawan Player

Пример 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 создает и возвращает указанный узел, как показано на следующем снимке экрана.

Tornament

Слияние узла со свойствами

Вы также можете объединить узел с набором свойств. Если вы это сделаете, 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 создает его, как показано на следующем снимке экрана.

Слияние отношений

Таким же образом, вы можете объединить несколько отношений и ненаправленных отношений тоже.