REMOVE
REMOVE
子句用于从节点和关系中删除属性,以及从节点中删除标签。
有关删除节点和关系的信息,请参阅 |
从节点中删除标签是一个幂等操作:如果你尝试从一个节点中删除一个标签,而该节点上没有该标签,那么什么也不会发生。查询统计数据会告诉你是否需要执行任何操作。 |
示例图
以下图用于下面的示例
要重新创建它,请在空的 Neo4j 数据库上运行以下查询
CREATE
(a:Swedish {name: 'Andy', age: 36, propTestValue1: 42}),
(t:Swedish {name: 'Timothy', age: 25, propTestValue2: 42}),
(p:German:Swedish {name: 'Peter', age: 34}),
(a)-[:KNOWS]->(t),
(a)-[:KNOWS]->(p)
删除属性
Neo4j 不允许在属性中存储 null
。相反,如果不存在值,则该属性不存在。因此,REMOVE
用于从节点或关系中删除属性值。
查询
MATCH (a {name: 'Andy'})
REMOVE a.age
RETURN a.name, a.age
节点将被返回,并且它上面不存在 age
属性。
a.name | a.age |
---|---|
|
|
行数:1 |
删除所有属性
REMOVE
不能用于从节点或关系中删除所有现有的属性。相反,使用 SET
以及 =
和一个空映射作为右操作数 将从节点或关系中清除所有属性。
动态删除属性
REMOVE
可用于删除节点或关系上的属性,即使属性键名不是静态已知的。
REMOVE n[key]
动态计算的键必须评估为 STRING
值。此查询创建了节点上每个属性的副本
查询
MATCH (n)
WITH n, [k IN keys(n) WHERE k CONTAINS "Test" | k] as propertyKeys (1)
FOREACH (i IN propertyKeys | REMOVE n[i]) (2)
RETURN n.name, keys(n);
1 | keys() 函数检索匹配节点的所有属性键,并且 列表推导 过滤这些键以仅包含包含子字符串“Test”的那些键,并将结果列表分配给变量 propertyKeys 。 |
2 | FOREACH 子句迭代 propertyKeys 列表中的每个键,并使用 REMOVE 子句删除相应的属性。 |
所有包含单词“Test”的属性都将被删除
n.name | keys(n) |
---|---|
|
|
|
|
|
|
行数:3 |
从节点中删除标签
要删除标签,请使用 REMOVE
。
查询
MATCH (n {name: 'Peter'})
REMOVE n:German
RETURN n.name, labels(n)
n.name | labels(n) |
---|---|
|
|
行数:1 |