neo4j 检查节点是否存在,如果不存在则创建

fumotvh3  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(279)

我试图使一个数据库,每当一个节点不存在,它将创建一个新的,并设置一个关系,这个节点和另一个。如果节点存在,两个节点得到一个关系。
我的问题是,如果我尝试连接2个现有节点,第二个节点将被重新创建。我尝试了合并和创建唯一,两者都不起作用。
我的示例代码:

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'})

直到这里它的工作,但与:

MATCH (n)
WHERE n.name = '3'
MERGE (n)-[:know {r:'123'}]->(test2 {name:'2'})

它创建新的节点“2”而不是连接到一个exist。

c0vxltue

c0vxltue1#

  • 在完整模式上使用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

相关问题