set语法用来修改节点和关系上的标签或者属性,这个修改包含了增加一个标签或者属性
创建两个个人,张三,李四
CREATE (:Person {name: '张三', age: 20})
CREATE (:Person {name: '李四', age: 25, worked: 'Google' })
CREATE (:Person {name: '王五', age: 26, hair: 'Short' })
CREATE (:Person {name: '赵六', age: 31})
MATCH (n {name: '张三'}) SET n.sex = '男' RETURN n.name, n.sex
│"n.name"│"n.sex"│
╞════════╪═══════╡
│"张三" │"男" │
条件匹配当年龄为20,那么设置他在大学读书
MATCH (n {name: '张三'}) SET (CASE WHEN n.age = 20 THEN n END).inSchool = true RETURN n.name, n.inSchool
╒════════╤════════════╕
│"n.name"│"n.inSchool"│
╞════════╪════════════╡
│"张三" │true
当条件无法匹配成功,那么设置失败,如果他60,那么退休
MATCH (n {name: '张三'}) SET (CASE WHEN n.age = 60 THEN n END).retire = true RETURN n.name, n.retire
╒════════╤══════════╕
│"n.name"│"n.retire"│
╞════════╪══════════╡
│"张三" │null
MATCH (n {name: '张三'}) SET n.age = n.age + 1 RETURN n.name, n.age
╒════════╤═══════╕
│"n.name"│"n.age"│
╞════════╪═══════╡
│"张三" │21 │
└────────┴───────┘
MATCH (n {name: '张三'}) SET n.age = null RETURN n.name, n.age
════════╤═══════╕
│"n.name"│"n.age"│
╞════════╪═══════╡
│"张三" │null │
└────────┴───────┘
MATCH (ww {name: '王五'}), (ls {name: '李四'}) SET ww = ls RETURN ww.name, ww.age, ww.hair, ww.worked, ls.name, ls.age
"ww.name"│"ww.age"│"ww.hair"│"ww.worked"│"ls.name"│"ls.age"│
╞═════════╪════════╪═════════╪═══════════╪═════════╪════════╡
│"李四" │25 │null │"Google" │"李四" │25 │
└─────────┴────────┴─────────┴───────────┴─────────┴────────┘
设置以后王五的名字变成了李四,王五的年龄变成了李四的年龄,王五的头发属性不见了, 王五获取了新属性工作在Google
MATCH (p {name: '赵六'})
SET p = {name: '赵云', nickname: '赵子龙'}
RETURN p.name, p.age, p.nickname
╒════════╤═══════╤════════════╕
│"p.name"│"p.age"│"p.nickname"│
╞════════╪═══════╪════════════╡
│"赵云" │null │"赵子龙" │
└────────┴───────┴────────────┘
MATCH (p {name: '赵云'}) SET p = {} RETURN p.name, p.age, p.nickname
╒════════╤═══════╤════════════╕
│"p.name"│"p.age"│"p.nickname"│
╞════════╪═══════╪════════════╡
│null │null │null │
└────────┴───────┴────────────┘
创建个赵云
CREATE (:Person {name: '赵云', age: 31})
MATCH (p {name: '赵云'}) SET p += {age: 38, company: '刘备集团'} RETURN p.name, p.age, p.company
╒════════╤═══════╤═══════════╕
│"p.name"│"p.age"│"p.company"│
╞════════╪═══════╪═══════════╡
│"赵云" │38 │"刘备集团" │
任何在map里,在节点或者关系没有的属性,会被追加
任何不在map里,但在节点和关系的属性会被继续保留
任何在map里,也在节点和关系里的属性,会被替换
一个空的map的使用+= 不会起任何作用
MATCH (p {name: '赵云'}) SET p += {} RETURN p.name, p.age
MATCH (n {name: '赵云'}) SET n.nickname = '子龙', n.son = '赵广'
使用参数进行设置
浏览器输入以下参数设置命令
:params
{
"inwar" : "长坂坡之战"
}
MATCH (n {name: '赵云'}) SET n.inwar = $inwar RETURN n.name, n.inwar
╒════════╤═════════╕
│"n.name"│"n.inwar"│
╞════════╪═════════╡
│"赵云" │"长坂坡之战" │
└────────┴─────────┘
多参数设置
:params
{
"props" : {
"name" : "赵云",
"sex" : "男",
"job" : "将军"
}
}
MATCH (n {name: '赵云'}) SET n = $props RETURN n.name, n.sex, n.age, n.job,n.inwar
一旦整个对象n被赋值 ,那么旧的属性就丢失了
╒════════╤═══════╤═══════╤═══════╤═════════╕
│"n.name"│"n.sex"│"n.age"│"n.job"│"n.inwar"│
╞════════╪═══════╪═══════╪═══════╪═════════╡
│"赵云" │"男" │null │"将军" │null │
└────────┴───────┴───────┴───────┴─────────┘
MATCH (n {name: '赵云'}) SET n:Soldier
RETURN n.name, labels(n) AS labels
╒════════╤════════════════════╕
│"n.name"│"labels" │
╞════════╪════════════════════╡
│"赵云" │["Person","Soldier"]│
MATCH (n {name: '赵云'})
SET n:China:ShuGuo
RETURN n.name, labels(n) AS labels
│"n.name"│"labels" │
╞════════╪═════════════════════════════════════╡
│"赵云" │["Person","China","Soldier","ShuGuo"]│