neo4j set值

SET子句用于更新节点上的标签以及节点和关系上的属性。

SET子句可以与映射(作为文字或参数提供)一起使用来设置属性。

在节点上设置标签是幂等操作 — 如果尝试在已经具有该标签的节点上设置标签,则不会发生任何事情。查询统计信息将说明是否实际发生了任何更新。

这些示例使用此图作为起点:

设置属性

更新节点属性:

询问
MATCH (n {name: 'Andy'})
SET n.surname = 'Taylor'
RETURN n.name, n.surname

查询返回新改变的节点。

表 1. 结果
名词n.姓氏

行数:1
属性集:1

"Andy"

"Taylor"

更新关系属性:

询问
MATCH (n:Swedish {name: 'Andy'})-[r:KNOWS]->(m)
SET r.since = 1999
RETURN r, m.name AS friend
表 2. 结果
r朋友

行数:1
属性集:1

[:KNOWS {since: 1999}]

"Peter"

可以使用更复杂的表达式来设置节点或关系的属性。例如,与直接指定节点相比,以下查询显示了如何为表达式选择的节点设置属性:

询问
MATCH (n {name: 'Andy'})
SET (CASE WHEN n.age = 36 THEN n END).worksIn = 'Malmo'
RETURN n.name, n.worksIn
表 3. 结果
名词n.作品

行数:1
属性集:1

"Andy"

"Malmo"

如果节点表达式计算结果为null,则不会采取任何操作,如下例所示:

询问
MATCH (n {name: 'Andy'})
SET (CASE WHEN n.age = 55 THEN n END).worksIn = 'Malmo'
RETURN n.name, n.worksIn

由于没有节点与CASE表达式匹配,因此表达式返回null。结果,没有发生更新,因此没有worksIn设置任何属性。

表 4. 结果
名词n.作品

行:1

"Andy"

<null>

更新属性

SET可用于更新节点或关系上的属性。此查询强制更改age属性中的类型:

询问
MATCH (n {name: 'Andy'})
SET n.age = toString(n.age)
RETURN n.name, n.age

age物业已改建为STRING '36'

表 5. 结果
名词n.年龄

行数:1
属性集:1

"Andy"

"36"

删除属性

虽然REMOVE通常使用 来删除属性,但有时使用命令来删除会更方便SET。例如,如果属性由参数提供。

询问
MATCH (n {name: 'Andy'})
SET n.name = null
RETURN n.name, n.age

目前该name财物已失踪。

表 6. 结果
名词n.年龄

行数:1
属性集:1

<null>

"36"

在节点和关系之间复制属性

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'

表 7. 结果
姓名年龄饥饿用户名年龄

行数:1
属性集:3

"Peter"

34

<null>

"Peter"

34

使用map替换所有属性并=

属性替换运算符=可用于SET将节点或关系上的所有现有属性替换为映射提供的属性:

询问
MATCH (p {name: 'Peter'})
SET p = {name: 'Peter Smith', position: 'Entrepreneur'}
RETURN p.name, p.age, p.position

此查询将name属性从更新PeterPeter Smith,删除了该属性,并将该属性age添加到节点。position'Peter'

表 8. 结果
姓名位置

行数:1
属性集:3

"Peter Smith"

<null>

"Entrepreneur"

使用空地图删除所有属性并=

SET可以使用with=和空映射作为右操作数来从节点或关系中删除所有现有属性:

询问
MATCH (p {name: 'Peter'})
SET p = {}
RETURN p.name, p.age

 此查询从节点中删除了所有现有属性,即name和。age'Peter'

表 9. 结果
姓名

行数:1
属性集:2

<null>

<null>

使用映射改变特定属性+=

属性变异运算符+=可用于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添加到节点。hungryposition'Peter'

表 10. 结果
姓名饥饿位置

行数:1
属性集:3

"Peter"

38

true

"Entrepreneur"

与属性替换运算符 相比=,提供一个空映射作为 的右操作数+=不会从节点或关系中删除任何现有属性。根据上面详述的语义,传入一个空映射+=不会产生任何效果:

询问
MATCH (p {name: 'Peter'})
SET p += {}
RETURN p.name, p.age
表 11.结果
姓名

行:1

"Peter"

34

SET使用一个子句设置多个属性

通过使用逗号分隔来一次设置多个属性:

询问
MATCH (n {name: 'Andy'})
SET n.position = 'Developer', n.surname = 'Taylor'
表 12. 结果

行数:0
属性集:2

(empty result)

使用参数设置属性

使用参数设置属性的值:

参数
{
  "surname": "Taylor"
}
询问
MATCH (n {name: 'Andy'})
SET n.surname = $surname
RETURN n.name, n.surname

surname已向节点添加属性'Andy'

表 13.结果
名词n.姓氏

行数:1
属性集:1

"Andy"

"Taylor"

使用参数设置所有属性

这将用参数提供的新集合替换节点上所有现有的属性。

参数
{
  "props" : {
    "name": "Andy",
    "position": "Developer"
  }
}
询问
MATCH (n {name: 'Andy'})
SET n = $props
RETURN n.name, n.position, n.age, n.hungry

'Andy'节点的所有属性已被参数中的属性替换props

表 14.结果
名词n.位置n.年龄n.饥饿

行数:1
属性集:4

"Andy"

"Developer"

<null>

<null>

在节点上设置标签

用于SET在节点上设置标签:

询问
MATCH (n {name: 'Stefan'})
SET n:German
RETURN n.name, labels(n) AS labels

查询返回新标记的节点。

表 15.结果
名词标签

行数:1
添加标签:1

"Stefan"

["German"]

在节点上设置多个标签

在节点上设置多个标签,SET并使用:来分隔不同的标签:

询问
MATCH (n {name: 'George'})
SET n:Swedish:Bossman
RETURN n.name, labels(n) AS labels

查询返回新标记的节点。

表 16.结果
名词标签

行数:1
添加标签:2

"George"

["Swedish","Bossman"]

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京橙溪科技有限公司enwing.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值