可以确保图数据库中存在某个特定的模式。如果该模式不存在,那就创建它。
可以指定让某个数据存在,不管是匹配到还是创建
在整个模式上使用,要么整个匹配,要么整个创建,不能部分匹配
//匹配某个节点,如果不存在就创建,存在就返回
merge (u:User{id:8,name:'吴用'})
return u
//根据条件来匹配 , 如果 u.id 重复出现,也只会创建一次
match (u:User)
merge (a:Auth{userId:u.id})
return a
// 检查节点是否存在,如果不存在则创建它并设置属性
merge (u:User{id:9,name:'林冲'})
on create set u.createTime = timestamp()
return u
// 匹配节点,并在找到的节点上设置属性
merge (u:User{id:3})
on match set u.name='武松'
return u
// create 与 match 同时使用
merge (u:User{id:4})
on create set u.name = '晃盖' , u.createTime = timestamp()
on match set u.name = '史进' , u.updateTime = timestamp()
return u
//匹配或创建关系。 注意必须至少指定 个绑定的节点
match (u1:User),(u2:User)
where u1.id = 6 and u2.id = 9
merge (u1)-[:DIRECT]->(u2)
return u1,u2
//如果 (o) 不存在,就创建节点。并创建它们的关系
match (u1:User),(u2:User)
where u1.id = 1 and u2.id = 11
merge (u1)-[:DIRECT]->(o)->(u2)
return u1,u2
//合并已存在两节点之前的关系
match (u:User{id:1})
merge (a:Auth{userId:u.id})
merge (u)-[:UA]->(a)
return u,a
//合并一个已存在节点和一个合并的节点之间的关系
match (u:User{id:1})
merge (u)-[:UA]->(a:Auth{userId:u.id})
return u,a
merge 的唯一性约束
-- 当使用的模式涉及唯一性约束时,cypher 可以通过 merge 来防止获取相冲突的结果
1. 唯一性约束与部分匹配 -- merge 将合并失败
2. 唯一性约束与匹配冲突 --merge 将合并失败