11.2 Create Unique
- 11.2.1 Создание уникальных узлов
- 11.2.2 Создание уникальных связей
- 11.2.3 Описание сложного образца
CREATE UNIQUE находится в середине MATCH и CREATE — будет сопоставлять то, что может, и создавать то, что отсутствует. CREATE UNIQUE будет всегда делать минимально возможные изменения в графе — если возможно использовать части существующего графа, они будут использованы.
Другим отличием от MATCH является то, что CREATE UNIQUE предполагает образец уникальным. Если находятся множественные совпадения подграфов, возникает ошибка.
Совет
В предложении CREATE UNIQUE так же существенно используются образцы. Прочитайте Раздел 8.5 “Образцы” для введения.
Примеры исходят из следующего набора данных:

11.2.1 Создание уникальных узлов
11.2.1.1 Создание отсутствующего узла
Если образец описывал необходимость в узле, и он не был сопоставлен, будет создан новый узел.
Запрос
MATCH (root { name: 'root' })
CREATE UNIQUE (root)-[:LOVES]-(someone)
RETURN someone
Корневой узел не имеет связей LOVES, поэтому узел создается, как и связь с этим узлом.
Таблица 11.11 Результат
| someone |
|---|
| Nodes created: 1 |
| Relationships created: 1 |
| Node[5]{} |
11.2.1.2 Создание узлов с значениями
Описанный образец может также содержать значения на узле. В этом случае используется следующий синтаксис: prop :
Запрос
MATCH (root { name: 'root' })
CREATE UNIQUE (root)-[:X]-(leaf { name:'D' })
RETURN leaf
Узла с именем D, который связан с корневым узлом, не существует, поэтому для соответствия с образцом создается новый узел.
Таблица 11.12 Результат
| leaf |
|---|
| Nodes created: 1 |
| Relationships created: 1 |
| Properties set: 1 |
| Node[5]{name:"D"} |
11.2.1.3 Создание отсутствующего узла с меткой
Если описанный образец требует узла с меткой, и такого узла с данной меткой не существует, Cypher создаст новый узел.
Запрос
MATCH (a { name: 'A' })
CREATE UNIQUE (a)-[:KNOWS]-(c:blue)
RETURN c
Узел A связан с узлом C связью KNOWS, но поскольку узел C не имеет метки :blue, создается новый узел с меткой :blue, наряду с созданием связи KNOWS от A к этому узлу.
Таблица 11.13 Результат
| C |
|---|
| Создано узлов: 1 |
| Создано связей: 1 |
| Добавлено меток: 1 |
| Node[5]{} |