我试图建立一个数据库,每当一个节点不存在时,它将创建一个新的并在此节点和另一个节点之间建立关系.如果节点存在,则两个节点都会建立关系.
我的问题是,如果我尝试连接2个现有节点,将重新创建第二个节点.我尝试使用MERGE和CREATE UNIQUE,两者都没有用.
我的例子:
CREATE (test1 name:'1'})
MATCH (n)
WHERE n.name = '1'
MERGE (n)-[:know {r:'123'}]->(test3 {name:'3'})
MATCH (n)
WHERE n.name = '1'
MERGE (n)-[:know {r:'123'}]->(test2 {name:'2'})
Run Code Online (Sandbox Code Playgroud)
到这里它的工作原理,但:
MATCH (n)
WHERE n.name = '3'
MERGE (n)-[:know {r:'123'}]->(test2 {name:'2'})
Run Code Online (Sandbox Code Playgroud)
它创建一个新节点"2"而不是连接到存在的节点.
Lua*_*nne 34
在完整模式上使用MERGE时,行为是整个模式匹配,或者创建整个模式.MERGE不会部分使用现有模式 - 全部或全部.如果需要部分匹配,可以通过将模式拆分为多个MERGE子句来实现. http://docs.neo4j.org/chunked/stable/query-merge.html
MERGE (n)-[:know {r:'123'}]->(test2 {name:'2'})将尝试匹配整个模式,因为它不存在,它会创建它.你能做的是:
MERGE (n {name: '3'}) //Create if a node with name='3' does not exist else match it
MERGE (test2 {name:'2'}) //Create if a node with name='2' does not exist else match it
MERGE (n)-[:know {r:'123'}]->(test2) //Create the relation between these nodes if it does not already exist
Run Code Online (Sandbox Code Playgroud)