首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Neo4j中merge和create unique的区别

Neo4j中merge和create unique的区别
EN

Stack Overflow用户
提问于 2014-04-01 06:39:42
回答 1查看 12.7K关注 0票数 31

我正在尝试弄清楚MERGE和CREATE UNIQUE之间的区别。我知道这些特性:

合并

如果不存在模式,我可以创建节点。

代码语言:javascript
复制
    MERGE (n { name:"X" }) RETURN n;

这将创建具有属性名的节点"n“,空节点"m”以及相关的关系。

代码语言:javascript
复制
    MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;

创建唯一

代码语言:javascript
复制
    CREATE UNIQUE (n { name:"X" }) RETURN n;

代码语言:javascript
复制
    MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;

如果此模式存在,则不创建任何内容,只返回pattern。

从我的角度来看,合并和创建唯一是完全相同的查询,但是使用创建唯一不能在关系中创建开始节点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 15:26:30

MERGE相比,CREATE UNIQUE的语义稍显模糊。MERGE是作为一种替代方案开发的,比CREATE UNIQUE具有更直观的行为;如果有疑问,MERGE通常是正确的选择。

MERGE视为匹配或创建的最简单方法。也就是说,如果数据库中的某些内容会对您在MERGE中使用的模式执行MATCH操作,那么MERGE将只返回该模式。如果没有匹配,MERGE将在模式中创建所有缺少的元素,其中缺少的元素表示任何未绑定的标识符。

给定的

代码语言:javascript
复制
MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)

从合并的角度来看,"a“是一个绑定标识符。这意味着cypher不知何故已经知道它代表的是哪个节点。

这条语句可以有两种结果。或者整个模式已经存在,并且不会创建任何内容,或者模式的某些部分丢失,将创建与该模式匹配的一组全新的关系和节点。

示例

代码语言:javascript
复制
// 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]->()
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22773562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档