CREATE

Предложение CREATE используется для создания вершин и рёбер в графе.

Примечание!
В YMatrix AGE все вершины и рёбра, созданные предложениями CREATE в рамках одного вызова функции cypher(), размещаются на одном и том же сегменте.

Завершающие предложения CREATE

Предложение CREATE, за которым не следует ни одно другое предложение, называется завершающим. Если запрос Cypher завершается завершающим предложением CREATE, функция cypher() не возвращает строк. Однако объявление списка столбцов при вызове функции обязательно — например, AS (a agtype). При завершающем предложении CREATE можно указать любое фиктивное имя столбца; оно не будет содержать данных.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE /* Это завершающее предложение CREATE без последующих предложений */
$$) AS (a agtype);

Результат

a
Возвращено 0 строк

Создание одной вершины

Используйте следующий запрос для создания одной вершины.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE (n)
$$) AS (v agtype);

Этот запрос не возвращает данных.

v
(0 строк)

Создание нескольких вершин

Разделяйте несколько шаблонов вершин запятыми.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE (n), (m)
$$) AS (v agtype);

Результат

a
Возвращено 0 строк

Создание вершины с меткой

Добавьте метку к вершине с помощью синтаксиса :Label.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE (:Person)
$$) AS (v agtype);

Этот запрос не возвращает данных.

Результат

v
Возвращено 0 строк

Создание вершины с меткой и свойствами

Можно одновременно создать вершину с меткой и присвоить ей свойства в одном предложении CREATE.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE (:Person {name: 'Andres', title: 'Developer'})
$$) AS (n agtype);

Этот запрос не возвращает данных.

Результат

n
(0 строк)

Возврат созданных узлов

Создание и возврат узлов можно выполнить в одном запросе с использованием предложения RETURN.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE (a {name: 'Andres'})
    RETURN a
$$) AS (a agtype);

Возвращает вновь созданную вершину.

Результат

a
{id: 0; label: ''; properties: {name: 'Andres'}}::vertex
(1 строка)

Создание петель

Для создания ребра, у которого начальная и конечная вершины совпадают (startid = endid), используйте один из следующих подходов:

  • Создайте петлю непосредственно в предложении CREATE.
  • Сначала выполните MATCH нужной вершины, затем — CREATE ребра.

Запрос (прямое создание)

SELECT *
FROM cypher('graph_name', $$
    CREATE (a)-[e:RELTYPE]->(a)
    RETURN e
$$) AS (e agtype);

Результат

e
{id: 0; startid: 0, endid: 0; label: 'RELTYPE'; properties: {}}::edge
(1 строка)

Запрос (сначала MATCH)

SELECT *
FROM cypher('graph_name', $$
    MATCH (a:Person)
    CREATE (a)-[e:RELTYPE]->(a)
    RETURN e
$$) AS (e agtype);

Результат

e
{id: 0; startid: 0, endid: 0; label: 'RELTYPE'; properties: {}}::edge
(1 строка)

Создание ребра между двумя вершинами

Для создания ребра между двумя существующими вершинами сначала выполните MATCH обеих вершин, затем — CREATE ребра.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (a:Person), (b:Person)
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    CREATE (a)-[e:RELTYPE]->(b)
    RETURN e
$$) AS (e agtype);

Возвращает вновь созданное ребро.

Результат

e
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {}}::edge
(1 строка)

Создание ребра со свойствами

Свойства рёбер задаются аналогично свойствам вершин. Значения свойств могут быть произвольными выражениями.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (a:Person), (b:Person)
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b)
    RETURN e
$$) AS (e agtype);

Возвращает вновь созданное ребро.

Результат

e
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {name: 'Node A<->Node B'}}::edge
(1 строка)

Создание полного пути

При использовании CREATE с шаблоном создаются все части шаблона, отсутствующие в текущей области видимости.

Запрос

SELECT *
FROM cypher('graph_name', $$
    CREATE p = (andres {name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael {name:'Michael'})
    RETURN p
$$) AS (p agtype);

Этот запрос создаёт три вершины и два ребра, привязывает полный путь к переменной p и возвращает его.

Результат

p
[{"id":0; "label": ""; "properties":{"name":"Andres"}}::vertex, {"id": 3; "startid": 0, "endid": 1; "label": "WORKS_AT"; "properties": {}}::edge, {"id":1; "label": ""; "properties": {}}::vertex, {"id": 3; "startid": 2, "endid": 1; "label": "WORKS_AT"; "properties": {}}::edge, {"id":2; "label": ""; "properties": {"name":"Michael"}}::vertex]::path
(1 строка)