如何更新FOREACH循环中的相关节点?

时间:2017-06-15 12:15:55

标签: neo4j

我正在使用FOREACH将一堆节点添加到我的图表中。

但是,有时这些节点将引用已存在的节点(具有现有索引),因此在这种情况下,我只是向节点添加一些属性。

但是,如果节点确实存在,我还想更新与相关的节点。

这是一个图表:

enter image description here

我编写了一个有效的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)关系。所以这个查询的结果是:

enter image description here

总之,在MERGE循环中FOREACH节点时,如何更新循环中节点可能连接的相关节点?

1 个答案:

答案 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

希望这有帮助, 汤姆