EdW*_*ood 25 merge neo4j cypher
我想弄清楚MERGE和CREATE UNIQUE之间有什么区别.我知道这些功能:
我能够创建节点,如果不存在模式.
MERGE (n { name:"X" }) RETURN n;
Run Code Online (Sandbox Code Playgroud)
这创建节点"n",其属性名称为空节点"m",关系为RELATED.
MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;
Run Code Online (Sandbox Code Playgroud)
我无法像这样创建节点.
CREATE UNIQUE (n { name:"X" }) RETURN n;
Run Code Online (Sandbox Code Playgroud)
如果存在节点"n",则创建唯一使空节点"m"和关系RELATED.
MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;
Run Code Online (Sandbox Code Playgroud)
如果存在此模式,则不会创建任何内容,只返回模式.
从我的角度来看,我看到MERGE和CREATE UNIQUE是完全相同的查询,但是使用CREATE UNIQUE,你无法在关系中创建起始节点.如果有人能解释这个问题并比较这些问题,我将不胜感激.
Jac*_*son 33
CREATE UNIQUE比语言更加模糊一些语义MERGE.MERGE被开发为具有更直观行为的替代方案CREATE UNIQUE; 如果有疑问,MERGE通常是正确的选择.
最简单的思考方式MERGE是MATCH-or-create.也就是说,如果数据库中的某些东西是MATCH您正在使用的模式MERGE,那么MERGE将只返回该模式.如果没有匹配,MERGE则将在模式中创建所有缺少的元素,其中缺少的元素表示任何未绑定的标识符.
特定
MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)
Run Code Online (Sandbox Code Playgroud)
从MERGE的角度来看,"a"是绑定标识符.这意味着密码以某种方式已经知道它代表哪个节点.
该陈述可以有两个结果.整个模式已经存在,并且不会创建任何内容,或者缺少模式的某些部分,并且将创建与模式匹配的全新关系和节点集.
例子
// 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]->()
Run Code Online (Sandbox Code Playgroud)