Neo4j/Cypher-如果不同节点满足特定条件,则设置节点

Neo4j/Cypher-如果不同节点满足特定条件,则设置节点,neo4j,cypher,Neo4j,Cypher,如果另一个节点满足特定条件,如何使用SET更改节点 伪代码示例: MATCH (node1{myId:123456}) // the node which should be compared RETURN CASE WHEN node1.name = "foo" // if condition is fulfilled THEN MATCH (node2{myId:654321}) SET node2.name = "bar" // the node which i want to edit)

如果另一个节点满足特定条件,如何使用
SET
更改节点

伪代码示例:

MATCH (node1{myId:123456}) // the node which should be compared
RETURN
CASE
WHEN node1.name = "foo" // if condition is fulfilled
THEN MATCH (node2{myId:654321}) SET node2.name = "bar" // the node which i want to edit)
END
我不能使用
MERGE
或简单地
MATCH(…)SET(…)
,因为“evaluated node”!='“应操纵的节点”<代码>大小写表达式似乎也不起作用。 我也尝试过黑客的方法,显然没有任何成功

请注意,我的用例暗示,所涉及的两个节点都已经存在(并且是唯一的)。

有什么建议吗?

首先,您需要在匹配项上使用标签,否则匹配项将无法利用索引

您可以使用justmatch(或可选匹配)和WHERE(在此处添加替代标签)解决比较问题

WHERE子句仅适用于上一个匹配、可选匹配或WITH子句

如果node1的名称不是“foo”,则执行WHERE子句后,上面的查询将不会有结果行,因此SET操作不会有任何更改


如果这是一个较大查询的片段,并且不管条件如何,您都有要执行的操作,请改用可选匹配。它将保留结果行,但如果node1的名称不是'foo',node2将为null,因此SET操作仍然不会更改任何内容

啊,我现在觉得有点傻。无论如何谢谢你!PS:这是一个简化的例子,这就是为什么我省略了标签。
MATCH (node1:Node{myId:123456}) 
MATCH (node2:Node{myId:654321}) 
WHERE node1.name = "foo" 
SET node2.name = "bar"