修改/添加属性
使用set进行一个属性修改,需要注意的是,如果本身没有surname
这个属性,会自动增加属性。
match(n {name: 'Andy'})
set n.surname = 'Taylor' # 如果没有surname属性,会自动添加这个属性
return n.name, n.surname
还有一个高级写法,用到了case when
:
match(n {name: 'Andy'})
set(
case
when n.age = 36
then n End
).wordIn = 'Malmo' # 满足age=36,则设置wordIn这个属性为'Malmo'
return n.name, n.wordIn # 如果不满足条件,则不会添加和设置属性,返回null
修改/添加多个属性
match(n {name: 'Peter'})
set n.a1= '1' , n.a2 = '3' # 多个属性之间用逗号分割
return n
删除一个属性
将这个属性置为null
,就是删除一个属性,如下:
MATCH (n { name: 'Andy' })
SET n.name = NULL RETURN n.name, n.age # 将需要删除的属性设置为NULL可以删除
删除所有的属性
使用一个空的map和等号,这样即可删除节点所有的属性了。
# 将属性集合设置成空,则删除所有属性,连name也会删除,但是会保留id和类
MATCH (p { name: 'Peter' })
SET p = { }
RETURN p.name, p.age
# 通过保留的id设置属性
match (n) where id(n)=166637 set n.name="Todd" return n
复制一个节点
SET可用于将所有属性从一个节点或关系复制到另一个节点。这将删除复制到的节点或关系上的所有其他属性。
# 将pn节点复制到at节点,包括其属性,如果at中有hungry属性,pn中没有,那么at中的hungry属性会被删除
MATCH (at { name: 'Andy' }),(pn { name: 'Peter' })
set at = pn
return at.name, at.age, at.hungry, pn.name, pn.age
注意:复制关系比较复杂,后续再做详细讲解
设置一个节点属性
从map中设置一个节点属性
# 这个操作会删除原来所有不在map中的节点
MATCH (p { name: 'Peter' })
SET p = { name: 'Peter Smith', position: 'Entrepreneur' }
RETURN p.name, p.age, p.position
注意,这个操作会删除原来所有不在map中的属性!那有没有不删除所有的属性做法呢?当然有:
其实和上面几乎一样,就是把=
变成+=
# 设置一个节点所有属性,但是不覆盖原来的属性
match (p{name: 'Peter'})
SET p += { age: 38, hungry: TRUE , position: 'Entrepreneur' }
RETURN p.name, p.age, p.hungry, p.position
修改类型
修改成一个类型:
# 注意如果n后面有类别限制(Person),修改后会添加到上面,运行之后会有两个类型Person和German
# 如果n后面没有类别限制,则对类别进行修改,将之前的Person修改为German
MATCH (n { name: 'Stefan' })
SET n:German
RETURN n.name, labels(n) AS labels
修改成多个类型:
# 修改成多个类别,比如在没有Person的限制下,修改成chinese和shanghai两个类别
match(n{name: 'Peter'})
set n:chinese:shanghai
return n.name, labels(n) as labels
或者先匹配到要更新的节点,使用REMOVE 删除要删除的标签,再设置新的标签即可
MATCH (n:OLD_LABEL)
REMOVE n:OLD_LABEL
SET n:NEW_LABEL
# 例子
MATCH (n:User:Teacher) REMOVE n:Student RETURN n