该SET
子句用于更新节点上的标签以及节点和关系上的属性。
该SET
子句可以与映射(作为文字或参数提供)一起使用来设置属性。
在节点上设置标签是幂等操作 — 如果尝试在已经具有该标签的节点上设置标签,则不会发生任何事情。查询统计信息将说明是否实际发生了任何更新。 |
这些示例使用此图作为起点:
设置属性
更新节点属性:
MATCH (n {name: 'Andy'})
SET n.surname = 'Taylor'
RETURN n.name, n.surname
查询返回新改变的节点。
名词 | n.姓氏 |
---|---|
行数:1 | |
|
|
更新关系属性:
MATCH (n:Swedish {name: 'Andy'})-[r:KNOWS]->(m)
SET r.since = 1999
RETURN r, m.name AS friend
r | 朋友 |
---|---|
行数:1 | |
|
|
可以使用更复杂的表达式来设置节点或关系的属性。例如,与直接指定节点相比,以下查询显示了如何为表达式选择的节点设置属性:
MATCH (n {name: 'Andy'})
SET (CASE WHEN n.age = 36 THEN n END).worksIn = 'Malmo'
RETURN n.name, n.worksIn
名词 | n.作品 |
---|---|
行数:1 | |
|
|
如果节点表达式计算结果为null
,则不会采取任何操作,如下例所示:
MATCH (n {name: 'Andy'})
SET (CASE WHEN n.age = 55 THEN n END).worksIn = 'Malmo'
RETURN n.name, n.worksIn
由于没有节点与CASE
表达式匹配,因此表达式返回null
。结果,没有发生更新,因此没有worksIn
设置任何属性。
名词 | n.作品 |
---|---|
行:1 | |
|
|
更新属性
SET
可用于更新节点或关系上的属性。此查询强制更改age
属性中的类型:
MATCH (n {name: 'Andy'})
SET n.age = toString(n.age)
RETURN n.name, n.age
该age
物业已改建为STRING
'36'
。
名词 | n.年龄 |
---|---|
行数:1 | |
|
|
删除属性
虽然REMOVE通常使用 来删除属性,但有时使用命令来删除会更方便SET
。例如,如果属性由参数提供。
MATCH (n {name: 'Andy'})
SET n.name = null
RETURN n.name, n.age
目前该name
财物已失踪。
名词 | n.年龄 |
---|---|
行数:1 | |
|
|
在节点和关系之间复制属性
SET
可以使用该函数将所有属性从一个节点或关系复制到另一个节点或关系properties()
。这将删除要复制到的节点或关系上的所有其他属性。
MATCH
(at {name: 'Andy'}),
(pn {name: 'Peter'})
SET at = properties(pn)
RETURN at.name, at.age, at.hungry, pn.name, pn.age
该'Andy'
节点的所有属性已被该节点的属性所取代'Peter'
。
姓名 | 年龄 | 饥饿 | 用户名 | 年龄 |
---|---|---|---|---|
行数:1 | ||||
|
|
|
|
|
使用map替换所有属性并=
属性替换运算符=
可用于SET
将节点或关系上的所有现有属性替换为映射提供的属性:
MATCH (p {name: 'Peter'})
SET p = {name: 'Peter Smith', position: 'Entrepreneur'}
RETURN p.name, p.age, p.position
此查询将name
属性从更新Peter
为Peter Smith
,删除了该属性,并将该属性age
添加到节点。position
'Peter'
姓名 | 页 | 位置 |
---|---|---|
行数:1 | ||
|
|
|
使用空地图删除所有属性并=
SET
可以使用with=
和空映射作为右操作数来从节点或关系中删除所有现有属性:
MATCH (p {name: 'Peter'})
SET p = {}
RETURN p.name, p.age
此查询从节点中删除了所有现有属性,即name
和。age
'Peter'
姓名 | 页 |
---|---|
行数:1 | |
|
|
使用映射改变特定属性+=
属性变异运算符+=
可用于SET
以细粒度的方式变异映射中的属性:
-
地图中任何不在节点或关系上的属性都将被添加。
-
节点或关系上不存在的任何地图属性将保持原样。
-
任何同时存在于映射和节点或关系中的属性都将在节点或关系中被替换。但是,如果映射中的任何属性为
null
,它将从节点或关系中被删除。
MATCH (p {name: 'Peter'})
SET p += {age: 38, hungry: true, position: 'Entrepreneur'}
RETURN p.name, p.age, p.hungry, p.position
此查询保持name
属性不变,将age
属性从更新34
为,并将和属性38
添加到节点。hungry
position
'Peter'
姓名 | 页 | 饥饿 | 位置 |
---|---|---|---|
行数:1 | |||
|
|
|
|
与属性替换运算符 相比=,提供一个空映射作为 的右操作数+=
不会从节点或关系中删除任何现有属性。根据上面详述的语义,传入一个空映射+=
不会产生任何效果:
MATCH (p {name: 'Peter'})
SET p += {}
RETURN p.name, p.age
姓名 | 页 |
---|---|
行:1 | |
|
|
SET
使用一个子句设置多个属性
通过使用逗号分隔来一次设置多个属性:
MATCH (n {name: 'Andy'})
SET n.position = 'Developer', n.surname = 'Taylor'
行数:0 |
|
使用参数设置属性
使用参数设置属性的值:
{
"surname": "Taylor"
}
MATCH (n {name: 'Andy'})
SET n.surname = $surname
RETURN n.name, n.surname
surname
已向节点添加属性'Andy'
。
名词 | n.姓氏 |
---|---|
行数:1 | |
|
|
使用参数设置所有属性
这将用参数提供的新集合替换节点上所有现有的属性。
{
"props" : {
"name": "Andy",
"position": "Developer"
}
}
MATCH (n {name: 'Andy'})
SET n = $props
RETURN n.name, n.position, n.age, n.hungry
该'Andy'
节点的所有属性已被参数中的属性替换props
。
名词 | n.位置 | n.年龄 | n.饥饿 |
---|---|---|---|
行数:1 | |||
|
|
|
|
在节点上设置标签
用于SET
在节点上设置标签:
MATCH (n {name: 'Stefan'})
SET n:German
RETURN n.name, labels(n) AS labels
查询返回新标记的节点。
名词 | 标签 |
---|---|
行数:1 | |
|
|
在节点上设置多个标签
在节点上设置多个标签,SET
并使用:
来分隔不同的标签:
MATCH (n {name: 'George'})
SET n:Swedish:Bossman
RETURN n.name, labels(n) AS labels
查询返回新标记的节点。
名词 | 标签 |
---|---|
行数:1 | |
|
|