在neo4j中创建可能存在的节点时,我对MATCH
的使用感到困惑。这两种情况有什么区别?
1.-
MERGE (n:Person { user_id: 1234 ,sex:'male'})
2.- MATCH (a:Person) WHERE a.user_id = 1234 AND a.sex = 'male' MERGE (n:Person { user_id: 1234 ,sex:'male'})
实际上即使在阅读完文档后我也无法理解MATCH
答案 0 :(得分:1)
MERGE
是"获取或创建"。如果模式存在,则获取它(绑定到指定的变量)。如果指定的模式不存在,则创建它。
MATCH
只是"得到"。如果模式存在,则绑定到指定的变量。如果模式不存在,则没有任何内容与变量绑定。
答案 1 :(得分:0)
以下是您的2个查询之间的差异。
当且仅当找不到这样的节点时,查询#1将创建具有指定标签和属性的节点。
查询#2基本上是浪费时间。它调用MATCH
来查找具有指定标签和属性的节点,并且只有在找到它时才会调用MERGE
(当且仅当它不存在时才会创建节点)。所以,#2最终没有做任何改变。如果节点已经存在,它将继续存在(因为MERGE
将发现它不需要做任何事情)。如果它不存在,它将不存在(因为甚至不会调用MERGE
)。
毋庸置疑,人们永远不会以与#2相同的方式使用MATCH
和MERGE
。以下是MATCH
和MERGE
的更典型示例,它确保了已在数据库中的2个人之间存在SPOUSE_OF
关系:
MATCH (a:Person {user_id: 1234}), (b:Person {user_id: 5678})
MERGE (a)-[:SPOUSE_OF]->(b);