关于MERGE关键字的原理
发布于 5 年前 作者 LongStockingPipi 2866 次浏览 来自 问答

我理解的MERGE就是如果节点已经存在则不创建,如果不存在则创建,这样的话就存在一个比较相等的问题,请问neo4j是如何判断merge的这个描述节点是否再数据库中已经存在了呢? 比如:merge(n:User {name:‘user1’, uid:‘0001’, age: 16}),其中uid是唯一字段; 是根据唯一字段来判断是否存在还是说根据语句所描述的所有字段信息来判断节点已经存在? 谢谢大家~

6 回复

是根据 merge 节点 label 以及后面的属性 去先 “match”,有匹配的就不创建新的了

@pangguoming 请问下我在Merge时遇到有两个线程同时执行Merge后创建出了两个重复的节点出来,您有什么解决办法吗?

@pikejun 用 distinct 关键字过滤下

@pangguoming 嗯,是的,谢谢。不过我后来相到了一个更好的办法,就是加唯一约束。呵呵

https://neo4j.com/developer/kb/understanding-how-merge-works/ Neo4j官方给出的解释是说merge操作先是去匹配merge后面括号中的模式(包括标签及其属性),如果这个模式存在不执行创建操作,如果不存在则安照模式创建该节点。

回到顶部