Neo4j的合并将创建新节点,如果它不存在的话。它有ON CREATE
和ON MATCH
作为两个区别。但是,如果创建节点以确定节点是否匹配,是否有办法返回不同的信息?
MERGE (charlie { name:'Charlie Sheen' })
ON CREATE SET charlie.name = 'Charlie'
RETURN charlie
类似于:ON CREATE RETURN 1, ON MERGE RETURN 0
答案 0 :(得分:7)
有relevant example on the merge page of the documentation:
MERGE (keanu:Person { name:'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, has(keanu.lastSeen);
基本上,这会在存在或不存在“lastSeen”属性的情况下存储您的0或1标志。
您的查询有一个奇怪的地方,即您在“Charlie Sheen”上匹配,但随后将您匹配的值(name
)修改为“Charlie”。这很奇怪 - 这意味着因为你每次修改它,即使你添加一个ON MATCH
子句,它也永远不会发射。您每次都会创建它,然后修改它,保证在下次运行该查询时它将被创建为新的。我猜想在以后的查询中修改匹配条款是个坏主意,除非这是特殊情况。