我正在尝试弄清楚MERGE和CREATE UNIQUE之间的区别。我知道这些特性:
合并
如果不存在模式,我可以创建节点。
MERGE (n { name:"X" }) RETURN n;
这将创建具有属性名的节点"n“,空节点"m”以及相关的关系。
MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;
创建唯一
CREATE UNIQUE (n { name:"X" }) RETURN n;
MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;
如果此模式存在,则不创建任何内容,只返回pattern。
从我的角度来看,合并和创建唯一是完全相同的查询,但是使用创建唯一不能在关系中创建开始节点。
发布于 2014-04-01 15:26:30
与MERGE
相比,CREATE UNIQUE
的语义稍显模糊。MERGE
是作为一种替代方案开发的,比CREATE UNIQUE
具有更直观的行为;如果有疑问,MERGE
通常是正确的选择。
将MERGE
视为匹配或创建的最简单方法。也就是说,如果数据库中的某些内容会对您在MERGE
中使用的模式执行MATCH
操作,那么MERGE
将只返回该模式。如果没有匹配,MERGE
将在模式中创建所有缺少的元素,其中缺少的元素表示任何未绑定的标识符。
给定的
MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)
从合并的角度来看,"a“是一个绑定标识符。这意味着cypher不知何故已经知道它代表的是哪个节点。
这条语句可以有两种结果。或者整个模式已经存在,并且不会创建任何内容,或者模式的某些部分丢失,将创建与该模式匹配的一组全新的关系和节点。
示例
// Before merge:
(a)-[:LIKES]->()-[:LIKES]->()
// After merge:
(a)-[:LIKES]->()-[:LIKES]->()
// Before merge:
(a)-[:LIKES]->()-[:OWNS]->()
// After merge:
(a)-[:LIKES]->()-[:OWNS]->()
(a)-[:LIKES]->()-[:LIKES]->()
// Before merge:
(a)
// After merge:
(a)-[:LIKES]->()-[:LIKES]->()
https://stackoverflow.com/questions/22773562
复制相似问题