我有以下表达式:
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并且不想要两次往返)。
答案 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。
恩典与和平,
吉姆