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"