DELETE

Предложение DELETE удаляет элементы графа — вершины, рёбра или пути.

Примечание!
Ограничения на DELETE в YMatrix AGE:

  1. Нельзя присваивать свойства переменной после её удаления через DELETE.
    MATCH (n) DELETE n SET n.lol = 'ftw' RETURN n  
    -- ОШИБКА: нельзя присвоить свойство удалённой переменной n  
  2. Нельзя создавать ребро через CREATE, ссылающееся на переменную, удалённую в том же запросе.
    MATCH (a)-[e:KNOWS]->(b) DELETE e CREATE (a)-[:KNOWS {reason: 'new'}]->(b)  
    -- ОШИБКА: AssignTransactionId() вызван процессом Segment Reader  

    Рекомендация: Разделите операции DELETE и последующие операции записи на отдельные запросы Cypher.

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

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

Введение

Для удаления свойств см. REMOVE.

Удаление вершины невозможно без одновременного удаления всех рёбер, для которых она является начальной или конечной. Либо удалите такие рёбра явно до удаления вершины, либо используйте DETACH DELETE.

Удаление изолированных вершин

Для удаления вершины используйте предложение DELETE.

Запрос

SELECT *
FROM cypher('graph_name', $$
        MATCH (v:Useless)
        DELETE v
$$) AS (v agtype);

Этот запрос удаляет вершины с меткой Useless, не инцидентные ни одному ребру. Данные не возвращаются.

v
(0 строк)

Удаление всех вершин и инцидентных им рёбер

Сначала привяжите вершины через MATCH, затем примените DETACH DELETE, чтобы сначала удалить все инцидентные рёбра, а затем сами вершины.

Запрос

SELECT *
FROM cypher('graph_name', $$
        MATCH (v:Useless)
        DETACH DELETE v
$$) AS (v agtype);

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

v
(0 строк)

Удаление только рёбер

Для удаления ребра сначала выполните его MATCH, затем включите связанную переменную в предложение DELETE.

Запрос

SELECT *
FROM cypher('graph_name', $$
        MATCH (n {name: 'Andres'})-[r:KNOWS]->()
        DELETE r
$$) AS (v agtype);

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

v
(0 строк)

Возврат удалённых вершин

Удалённую вершину можно вернуть с помощью RETURN.

Запрос

SELECT *
FROM cypher('graph_name', $$
        MATCH (n {name: 'A'})
        DELETE n
        RETURN n
$$) AS (a agtype);

Результат

v
{"id": 281474976710659, "label": "", "properties": {"name": "A"}}::vertex
(1 строка)