如果不存在,Neo4j的合并将创建新节点.它具有ON CREATE和ON MATCH两个区别.但是,如果创建节点以确定节点是否匹配,是否有办法返回不同的信息?
MERGE (charlie { name:'Charlie Sheen' })
ON CREATE SET charlie.name = 'Charlie'
RETURN charlie
Run Code Online (Sandbox Code Playgroud)
就像是: ON CREATE RETURN 1, ON MERGE RETURN 0
MERGE (keanu:Person { name:'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, has(keanu.lastSeen);
Run Code Online (Sandbox Code Playgroud)
基本上,这会在存在或不存在"lastSeen"属性时存储您的0或1标志.
你的查询有这么奇怪,你匹配"查理辛",但然后修改你匹配的值(name)为"查理".这很奇怪 - 这意味着因为你每次修改它,即使你添加一个ON MATCH子句,它也永远不会发射.您每次都会创建它,然后修改它,保证在下次运行该查询时它将被创建为新的.我猜想在稍后的查询中修改匹配条款是个坏主意,除非这是一个特殊情况.