我在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是否有重复或节点将被多次创建
提前致谢...
答案 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
最终创造了两个亨利和两个玛丽。