【Cypher】SET 语句:更新节点或关系的属性、标签

一、什么是 SET 语句?

SET 语句是 Cypher 中用于更新节点或关系的属性、标签的语句。

  • SET 可以修改现有属性、添加新属性、删除属性或更新标签。
  • SET 可与 MATCHMERGE 结合使用,以更新数据。

二、SET 语法结构

SET variable.property = value
语法说明:
  • SET:更新属性、标签的关键字。
  • variable:要更新的节点或关系的变量名。
  • property:属性名,可以是一个或多个。
  • value:要设置的属性值,可以是字符串、数字、布尔值、列表或 NULL

三、SET 用于更新属性


3.1 更新单个属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 30
RETURN n
  • 匹配 name = 'Alice'Person 节点。
  • 使用 SET 更新 age 属性的值为 30

3.2 更新多个属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 30, n.city = 'New York'
RETURN n
  • SET 语句可以一次更新多个属性,agecity 属性将被更新。

3.3 添加新属性
MATCH (n:Person {name: 'Alice'})
SET n.email = 'alice@example.com'
RETURN n
  • email 属性不存在时,SET 会自动添加新属性。

3.4 使用 SET 更新属性并保留原有属性
MATCH (n:Person {name: 'Alice'})
SET n += {age: 30, city: 'New York'}
RETURN n
  • += 操作符会将新属性添加到节点中,并保留原有属性。

3.5 SET 替换所有属性
MATCH (n:Person {name: 'Alice'})
SET n = {name: 'Alice', age: 30, city: 'New York'}
RETURN n
  • 使用 = 赋值时,会替换节点或关系的所有现有属性。
  • 旧属性将被删除,只保留 nameagecity

3.6 将属性设置为 NULL(删除属性)
MATCH (n:Person {name: 'Alice'})
SET n.age = NULL
RETURN n
  • age 属性设置为 NULL 会删除该属性。

四、SET 用于更新标签


4.1 添加标签
MATCH (n:Person {name: 'Alice'})
SET n:Employee
RETURN n
  • SET n:Employeen 添加 Employee 标签。
  • 节点 n 现在具有两个标签:PersonEmployee

4.2 添加多个标签
MATCH (n:Person {name: 'Alice'})
SET n:Employee:Manager
RETURN n
  • 同时添加 EmployeeManager 标签。

4.3 替换标签
MATCH (n:Person {name: 'Alice'})
REMOVE n:Person
SET n:Employee
RETURN n
  • REMOVE 语句删除 Person 标签,SET 添加 Employee 标签。

4.4 使用 SET 替换所有标签
MATCH (n:Person {name: 'Alice'})
SET n:Employee
RETURN n
  • 如果节点 n 之前有 Person 标签,将只保留 Employee 标签。

五、SETMERGE 结合使用


5.1 使用 ON CREATE SET 设置属性
MERGE (n:Person {name: 'Alice'})
ON CREATE SET n.age = 30, n.city = 'New York'
RETURN n
  • 如果 Alice 不存在,则创建新节点,并设置 agecity 属性。
  • 如果 Alice 已存在,不执行 ON CREATE SET 逻辑。

5.2 使用 ON MATCH SET 更新属性
MERGE (n:Person {name: 'Alice'})
ON MATCH SET n.lastLogin = timestamp()
RETURN n
  • 如果 Alice 已存在,则更新 lastLogin 属性为当前时间戳。

5.3 同时使用 ON CREATE SETON MATCH SET
MERGE (n:Person {name: 'Alice'})
ON CREATE SET n.age = 30, n.city = 'New York'
ON MATCH SET n.lastLogin = timestamp()
RETURN n
  • ON CREATE SETON MATCH SET 可以一起使用,以应对不同的情况。

六、SETMATCH 结合使用


6.1 更新匹配到的节点属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 35, n.city = 'Los Angeles'
RETURN n
  • MATCH 语句匹配 Alice 节点,并使用 SET 更新 agecity 属性。

6.2 更新匹配到的关系属性
MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'})
SET r.since = 2020
RETURN a, b, r
  • 匹配 AliceBob 之间的 KNOWS 关系,更新 since 属性。

七、SETWITH 结合使用


7.1 使用 WITH 进行数据预处理
MATCH (n:Person)
WITH n, n.age + 5 AS newAge
SET n.age = newAge
RETURN n
  • WITH 语句将 age5 作为 newAge 传递给 SET 语句。

7.2 更新多个节点
MATCH (n:Person)
WITH n, size(n.name) AS nameLength
SET n.nameLength = nameLength
RETURN n
  • 计算 name 的长度,并将其作为新属性 nameLength 设置在 Person 节点上。

八、删除属性或标签


8.1 删除单个属性
MATCH (n:Person {name: 'Alice'})
SET n.age = NULL
RETURN n
  • age 设置为 NULL 会删除该属性。

8.2 删除多个属性
MATCH (n:Person {name: 'Alice'})
SET n += {age: NULL, city: NULL}
RETURN n
  • 使用 +=agecity 属性设置为 NULL,删除这些属性。

8.3 删除标签
MATCH (n:Person {name: 'Alice'})
REMOVE n:Employee
RETURN n
  • REMOVE 语句删除 Employee 标签,不影响 Person 标签。

8.4 删除多个标签
MATCH (n:Person {name: 'Alice'})
REMOVE n:Employee:Manager
RETURN n
  • 删除 EmployeeManager 标签。

九、使用 SET 批量更新数据


9.1 批量更新属性
UNWIND ['Alice', 'Bob', 'Charlie'] AS name
MATCH (n:Person {name: name})
SET n.status = 'active'
RETURN n
  • 使用 UNWIND 批量更新多个 Person 节点的 status 属性。

9.2 使用 SET 批量设置关系属性
MATCH (a:Person)-[r:KNOWS]->(b:Person)
WHERE a.name IN ['Alice', 'Bob']
SET r.since = 2023
RETURN a, b, r
  • AliceBobKNOWS 关系批量更新 since 属性。

十、SET 的注意事项


10.1 SET 会覆盖现有属性
MATCH (n:Person {name: 'Alice'})
SET n = {name: 'Alice', city: 'Los Angeles'}
RETURN n
  • 直接使用 SET 赋值时,会替换所有现有属性,未包含的属性将被删除。

10.2 使用 += 可以保留原有属性
MATCH (n:Person {name: 'Alice'})
SET n += {city: 'Los Angeles'}
RETURN n
  • += 操作符用于添加或更新属性,不会删除现有属性。

10.3 更新标签时要注意覆盖问题
MATCH (n:Person {name: 'Alice'})
SET n:Employee
RETURN n
  • 直接 SET 标签时,不会删除原有标签。

十一、总结

  • SET 语句是 Cypher 中更新节点和关系属性、标签的关键语句。
  • SET 可用于更新、添加或删除属性,并可修改节点或关系的标签。
  • SET 支持多种写法,如 SET n.property = valueSET n = {}SET n += {} 等。
  • SET 可与 MATCHMERGEWITH 等语法结合使用,灵活实现批量更新或条件更新。

通过灵活运用 SET,可以有效管理 Neo4j 图数据的属性、标签和关系属性,从而提升数据维护和分析的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彬彬侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值