Cypher - MERGE

 可以确保图数据库中存在某个特定的模式。如果该模式不存在,那就创建它。
 可以指定让某个数据存在,不管是匹配到还是创建
 在整个模式上使用,要么整个匹配,要么整个创建,不能部分匹配

//匹配某个节点,如果不存在就创建,存在就返回

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 将合并失败

 

 

 

 

 

转载于:https://my.oschina.net/u/2552286/blog/3070328

你可能感兴趣的:(Cypher - MERGE)