Neo4j合并只有在创建时才会返回

时间:2014-11-18 12:08:24

标签: neo4j cypher

Neo4j的合并将创建新节点,如果它不存在的话。它有ON CREATEON MATCH作为两个区别。但是,如果创建节点以确定节点是否匹配,是否有办法返回不同的信息?

MERGE (charlie { name:'Charlie Sheen' })
ON CREATE SET charlie.name = 'Charlie'
RETURN charlie

类似于:ON CREATE RETURN 1, ON MERGE RETURN 0

1 个答案:

答案 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子句,它也永远不会发射。您每次都会创建它,然后修改它,保证在下次运行该查询时它将被创建为新的。我猜想在以后的查询中修改匹配条款是个坏主意,除非这是特殊情况。