11.3.5 Использование ограничений уникальности с MERGE

Например, если заданы два ограничения уникальности на :Person(id) и :Person(ssn): тогда запрос типа MERGE (n:Person {id: 12, ssn: 437}) завершится неудачно, если есть два разных узла (один с id=12, а другой с ssn=437), или если есть только один узел, имеющий только одно из свойств. Другими словами, должен быть точно один узел, который соответствует образцу, или ни одного сопоставимого узла.

Заметим, что следующие примеры предполагают наличие ограничений уникальности, которые были созданы с помощью:

CREATE CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE;
CREATE CONSTRAINT ON (n:Person) ASSERT n.role IS UNIQUE;

11.3.5.1 Слияние, использующее ограничения уникальности, создает новый узел, если узел не обнаруживается

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

Запрос

MERGE (laurence:Person { name: 'Laurence Fishburne' })
RETURN laurence

создаёт узел laurence. Если laurence уже существовал, слияние просто вернёт существующий узел.

Таблица 11.25 Результат

laurence
Nodes created: 1
Properties set: 1
Labels added: 1
Node[8]{name:"Laurence Fishburne"}

11.3.5.2 Слияние, использующее ограничения уникальности, сопоставляется существующему узлу

Слияние, использующее ограничения уникальности, сопоставляется существующему узлу.

Запрос

MERGE (oliver:Person { name:'Oliver Stone' })
RETURN oliver

просто вернет узел oliver, поскольку он уже существует.

Таблица 11.26 Результат

oliver
Node[0]{name:"Oliver Stone"}

11.3.5.3 Слияние с ограничениями уникальности и частичным совпадением

Слияние, использующее ограничения уникальности, терпит неудачу, когда находит частичные совпадения.

Запрос

MERGE (michael:Person { name:'Michael Douglas', role:'Gordon Gekko' })
RETURN michael

Хотя имеется сопоставление michael с уникальным узлом с именем Michael Douglas, не существует уникального узла с ролью Gordon Gekko, и слияние терпит неудачу.

Сообщение об ошибке:

Слияние не нашло сопоставимого узла и не может создать новый узел из-за конфликта между существующим и отсутствующим уникальными узлами. Конфликтующие ограничения имеются на:

:Person.name и :Person.role

11.3.6. Использование параметров отображения с MERGE

MERGE не поддерживает параметров отображения, подобных, например, параметрам CREATE. Чтобы использовать параметры отображения с MERGE, необходимо явно использовать ожидаемые свойства, подобно следующему примеру. Подробную информацию о параметрах смотри в Разделе 7.5 “Параметры”.

Параметры

{
  "param" : {
    "name" : "Keanu Reeves",
    "role" : "Neo"
  }
}

Запрос

MERGE (oliver:Person { name: { param }.name, role: { param }.role })
RETURN oliver

Таблица 11.27 Результат

oliver
Nodes created: 1
Properties set: 2
Labels added: 1
Node[8]{name:"Keanu Reeves",role:"Neo"}

Предыдущая | Следующая