我正在使用FOREACH将一堆节点添加到我的图表中。
但是,有时这些节点将引用已存在的节点(具有现有索引),因此在这种情况下,我只是向节点添加一些属性。
但是,如果节点确实存在,我还想更新与相关的节点。
这是一个图表:
我编写了一个有效的Cypher查询:
FOREACH (item in [$list] |
MERGE (check :label {index: item.index})
MERGE (check)-[:r]->(related)
ON CREATE SET
check.value= item.value,
check.property= item.stuff
ON MATCH SET
check.value= item.value,
check.proprety= item.stuff,
related.value = related.value + node.value
)
但是,它始终在(check)-[:r]->(related)
节点上创建一个空的(check)
关系。所以这个查询的结果是:
总之,在MERGE
循环中FOREACH
节点时,如何更新循环中节点可能连接的相关节点?
答案 0 :(得分:2)
使用可选匹配而不是第二次合并:
UNWIND $list AS item
MERGE (check :label {index: item.index})
ON CREATE SET
check.value= item.value,
check.property= item.stuff
ON MATCH SET
check.value= item.value,
check.property= item.stuff
OPTIONAL MATCH (:label {index: item.index})-[:r]->(related)
SET related.value = related.value + item.value
希望这有帮助, 汤姆