Neo4j中的图冗余

Neo4j中的图冗余,neo4j,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 : '

我在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是否存在重复,或者节点是否会被多次创建


提前感谢…

如果数据已经存在,则合并不会重新创建数据<代码>创建始终创建数据,即使数据已经存在

指出它总是匹配完整的模式

在你给我们的密码片段的例子中,如果你运行两次,你应该只得到罗杰、布兰妮和克里斯蒂安的一个副本,但我希望罗杰和布兰妮之间有两种不同的关系,因为
CREATE
总是创建

注意
MERGE
上的gotcha,但是它总是按照您指定的完整模式进行合并。例如,如果您这样做:

MERGE (a:Person {fname: "Henry"});
MERGE (a:Person {fname: "Henry", lname: "Banks"});
然后你得到两个亨利,一个没有名字,一个有名字。这是因为第二个
MERGE
查找fname:Henry,lname:Banks的Person节点,但没有找到它,因此它创建了一个。它不会向现有节点添加额外属性。这是使用MERGE时常见的错误

使用
MERGE
(同样由于“整体模式匹配”)的另一个常见错误是:


这最终会创建两个Henry's和两个Mary's。

作为参考,
MERGE
语句并没有创建新的人员,只有您的
CREATE
语句,请参见重新执行时的说明

created 1 relationship set 1 property
您可能希望合并所有语句:

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;
有关示例,请参见

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;