Cypher中合并和创建之间的区别

时间:2014-04-21 12:08:16

标签: neo4j

  1. 有没有人可以告诉我Cypher查询中的合并和创建之间的区别。
  2. Neo4j如何在物理上存储数据?
  3. 提前致谢..

1 个答案:

答案 0 :(得分:3)

CREATE正如它所说的那样。它创建,如果这意味着创建重复,那么它创建。 MERGE与create执行相同的操作,但还会检查节点是否已存在,并指定了您指定的属性。如果是,那么它不会创建。这有助于避免重复。这是一个例子:我使用CREATE两次来创建一个具有相同名称的人。

neo4j-sh (?)$ create (p:Person {name: "Bob"});
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 1
Labels added: 1
9 ms
neo4j-sh (?)$ create (p:Person {name: "Bob"});
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 1
Labels added: 1
5 ms

所以现在当我们查询时,有两个Bob's。

neo4j-sh (?)$ match (p:Person {name:"Bob"}) return p;
+--------------------------+
| p                        |
+--------------------------+
| Node[222124]{name:"Bob"} |
| Node[222125]{name:"Bob"} |
+--------------------------+
2 rows
46 ms

让我们{另一个鲍勃MERGE,看看会发生什么。

neo4j-sh (?)$ merge (p:Person {name:"Bob"});
+--------------------------------------------+
| No data returned, and nothing was changed. |
+--------------------------------------------+
2 ms
neo4j-sh (?)$ match (p:Person {name:"Bob"}) return p;
+--------------------------+
| p                        |
+--------------------------+
| Node[222124]{name:"Bob"} |
| Node[222125]{name:"Bob"} |
+--------------------------+
2 rows
11 ms
鲍勃已经存在,所以MERGE在这里什么也没做。再次查询,同样存在两个Bobs。如果数据库中没有Bobs,MERGE将完成与CREATE相同的操作。