图数据库(四):Neo4j中Cypher语言更新操作

修改/添加属性

使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值