DELETE(删除)

DELETE 子句用于删除图元素——节点、关系或路径。

注意!
YMatrix AGE 中 DELETE 的限制:

  1. DELETE 后不能对同一变量执行 SET
    MATCH(n) DELETE n SET n.lol = 'ftw' RETURN n
    -- ERROR: cannot SET property on deleted variable n
  2. DELETE 后接 CREATE 引用同一变量会报错
    MATCH (a)-[e:KNOWS]->(b) DELETE e CREATE (a)-[:KNOWS {reason: 'new'}]->(b)
    -- ERROR: AssignTransactionId() called by Segment Reader process

使用建议:将 DELETE 和后续写操作拆分为独立的 Cypher 语句执行。

终端 DELETE 子句

不跟随其他子句的 DELETE 子句称为终端子句。当 Cypher 查询以终端子句结尾时,cypher 函数调用不会返回任何结果。但是,cypher 函数调用仍然需要列定义列表。当 cypher 以终端节点结尾时,在列定义列表中定义一个值即可:该变量不会返回任何数据。

简介

要移除属性,请参阅 REMOVE

你不能在不同时删除以该顶点为起点或终点的边的情况下删除该节点。要么显式删除这些边,要么使用 DETACH DELETE

删除孤立顶点

要删除顶点,使用 DELETE 子句。

查询

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

这将删除没有边的顶点(标签为 Useless)。此查询不返回任何内容。

v
(0 rows)

删除所有顶点及其关联的边

运行 MATCH 子句将收集所有节点——使用 DETACH 选项先删除顶点的边,然后删除顶点本身。

查询

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

此查询不返回任何内容。

v
(0 rows)

仅删除边

要删除边,使用 MATCH 子句找到边,然后将变量添加到 DELETE 子句中。

查询

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

此查询不返回任何内容。

v
(0 rows)

返回已删除的顶点

你可以使用 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 rows)