MERGE创建多个节点

时间:2014-08-25 14:04:22

标签: neo4j cypher

我有以下表达式:

MERGE (d:Day { day: "1" }) CREATE (a:Test { url:"unique1" })

在数据库中,已有三个节点匹配(d:Day { day: "1" })

如果我执行上面的表达式,然后执行

MATCH (a:Test { url:"unique1" }) return count(a) 

我可以看到已经创建了三个测试节点。这是为什么?

其次,如果我想创建:Test和d:Day,如果节点不存在,我该如何在一个表达式中执行此操作(想要使用其余的API并且不想要两次往返)。

2 个答案:

答案 0 :(得分:4)

好的MERGE就像MATCH或CREATE一样工作,所以如果他每天发现3个节点:1,他将创建测试3个节点,就像他找到日节点一样多。

也许你可以这样做:

MERGE (d:Day { day: "1" })
MERGE (a:Test { url:"unique1" })

答案 1 :(得分:0)

dJens,

如果您只想在创建Day节点时在上面的示例中创建Test节点,请执行以下查询:

MERGE (d:Day {day : '1'})
ON CREATE SET d.new = 1
WITH d
WHERE d.new = 1
MERGE (a:Test {url : 'unique1'})
REMOVE d.new

如果创建了Day节点,并且仅当Test节点尚不存在时,这将仅创建Test节点。如果您始终想在创建Day节点时创建Test节点,则可以使用CREATE替换第二个MERGE。

恩典与和平,

吉姆

相关问题