merge - Neo4j中合并和创建唯一性之间的区别

标签 merge neo4j cypher

我试图弄清楚 MERGE 和 CREATE UNIQUE 之间的区别。我知道这些功能:

合并

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

    MERGE (n { name:"X" }) RETURN n;

这将创建具有属性名称的节点“n”、空节点“m”和关系 RELATED。
    MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;

创造独一无二的

我无法像这样创建节点。
    CREATE UNIQUE (n { name:"X" }) RETURN n;

如果存在节点“n”,则创建唯一的空节点“m”和关系相关。
    MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;

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

从我的角度来看,我看到 MERGE 和 CREATE UNIQUE 是完全相同的查询,但是使用 CREATE UNIQUE 你不能在关系中创建开始节点。如果有人能解释这个问题并比较这些查询,我将不胜感激,谢谢。

最佳答案

CREATE UNIQUE语义比 MERGE 稍显晦涩. MERGE被开发为具有比 CREATE UNIQUE 更直观的行为的替代方案;如有疑问,MERGE通常是正确的选择。

最容易想到的方法MERGE是作为一个匹配或创建。也就是说,如果数据库中的某些内容将 MATCH您在 MERGE 中使用的模式,然后 MERGE只会返回该模式。如果没有匹配,MERGE将在模式中创建所有缺失的元素,其中缺失的元素表示任何未绑定(bind)的标识符。

给定

MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)

从 MERGE 的角度来看,“a”是一个绑定(bind)标识符。这意味着 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]->()

关于merge - Neo4j中合并和创建唯一性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773562/

相关文章:

neo4j - 如何使用密码查询在neo4j中找到特定关系类型的最连接节点?

java - Neo4j 返回问题 : How to map the properties of one node and one property from other node which connected into java object

python - py2neo Cypher 交易失败

performance - 什么决定了 SVN 1.6 合并操作的速度

python - 基于部分startswith匹配合并两个数据帧

python-3.x - 有没有一种Pythonic方法将日期时间上的数据帧与具有不规则日期时间戳的数据对合并

java - 如何删除neo4j图数据库

neo4j - 如何使用cypher删除neo4j 2.0中的节点或具有NULL属性的关系

neo4j - 如何在文件中执行 Cypher?

sqlite - 在SQLite 3中合并行