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]{} |