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

Neo4j 如何更新FOREACH循环中的相关节点?,neo4j,Neo4j,我正在使用FOREACH向我的图中添加一组节点 但是,有时这些节点将引用已经存在的节点(具有现有索引),因此在这种情况下,我只向节点添加一些属性 但是,如果该节点确实存在,我还想更新与之相关的节点 下面是一张图表: 我编写了一个有效的密码查询: FOREACH (item in [$list] | MERGE (check :label {index: item.index}) MERGE (check)-[:r]->(related) ON CREATE SE

我正在使用FOREACH向我的图中添加一组节点

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

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

下面是一张图表:

我编写了一个有效的密码查询:

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)
节点上创建一个空的
(check)-[:r]->(related)
关系。所以这个查询的结果是:


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

使用可选匹配,而不是第二次合并:

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
希望这有帮助,
汤姆

谢谢汤姆。这正是我想要的,但不幸的是我不能在
FOREACH
循环中使用
MATCH
。很好的一点,请原谅。放松会起到作用吗?该页面上的最后一个示例看起来非常像您想要的。。。我调整了答案以反映这一点,但实际上还没有尝试过。谢谢,我认为
放松
可能是我想要的。我的例子是我的查询的一个简化版本,所以我将看看我是否可以得到一些工作。再次感谢。