Neo4j 如何更新FOREACH循环中的相关节点?
我正在使用FOREACH向我的图中添加一组节点 但是,有时这些节点将引用已经存在的节点(具有现有索引),因此在这种情况下,我只向节点添加一些属性 但是,如果该节点确实存在,我还想更新与之相关的节点 下面是一张图表: 我编写了一个有效的密码查询:Neo4j 如何更新FOREACH循环中的相关节点?,neo4j,Neo4j,我正在使用FOREACH向我的图中添加一组节点 但是,有时这些节点将引用已经存在的节点(具有现有索引),因此在这种情况下,我只向节点添加一些属性 但是,如果该节点确实存在,我还想更新与之相关的节点 下面是一张图表: 我编写了一个有效的密码查询: FOREACH (item in [$list] | MERGE (check :label {index: item.index}) MERGE (check)-[:r]->(related) ON CREATE SE
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
。很好的一点,请原谅。放松会起到作用吗?该页面上的最后一个示例看起来非常像您想要的。。。我调整了答案以反映这一点,但实际上还没有尝试过。谢谢,我认为放松
可能是我想要的。我的例子是我的查询的一个简化版本,所以我将看看我是否可以得到一些工作。再次感谢。