Neo4j中图形的冗余

时间:2014-08-18 11:23:31

标签: neo4j

我在Neo4j中创建了一个小图,并创建了相应的节点和关系。如果我再次运行相同的代码,则会再次创建节点和关系,而不是显示消息,就像节点和关系已经存在类似Oracle一样。

MERGE (a:Person1 { name : 'ROGER', title : 'Developer', age :28})  
MERGE (b:Person2 { name : 'Britney', title : 'financier',age :32})  
MERGE (c:Person3 { name : 'Christian', title : 'tester',age :24}) 
Create (a)-[:HUSBAND{last_name:'WHITE'}]->(b) RETURN a,b,c;

所以我想澄清Neo4j是否有重复或节点将被多次创建

提前致谢...

2 个答案:

答案 0 :(得分:1)

作为参考,MERGE语句不会创建新人,最后只有CREATE语句,请参阅http://console.neo4j.org/r/qrzr6u重新执行时说

created 1 relationship set 1 property

您可能希望在所有陈述中使用MERGE:

MERGE (a:Person1 { name : 'ROGER', title : 'Developer', age :28 })
MERGE (b:Person2 { name : 'Britney', title : 'financier', age :32 })
MERGE (c:Person3 { name : 'Christian', title : 'tester', age :24 })
MERGE (a)-[:HUSBAND { last_name:'WHITE' }]->(b)
RETURN a,b,c;

有关示例,请参阅http://console.neo4j.org/r/vmfl2v

答案 1 :(得分:0)

如果数据已存在,则

MERGE不会重新创建数据。 CREATE始终会创建数据,即使数据已存在。

The documentation on merge指出它总是匹配整个模式。

如果是你给我们的密码片段,如果你跑了两次,你应该只得到一份罗杰,布兰妮和克里斯蒂安,但我希望罗杰和布兰妮之间有两个独立的关系,因为{{ 1}}总是创造。

注意CREATE上的问题,它总是合并你指定的完整模式。例如,如果你这样做:

MERGE

然后你得到两个Henrys,一个没有lname属性,一个有。这是因为第二个MERGE (a:Person {fname: "Henry"}); MERGE (a:Person {fname: "Henry", lname: "Banks"}); 查找具有fname:Henry,lname:Banks的Person节点并且无法找到它,因此它创建了一个。它向现有节点添加额外属性。这是使用MERGE的常见操作。

另一个使用MERGE的常见旅行(再次由于“整个模式匹配”)是这样的:

MERGE

最终创造了两个亨利和两个玛丽。