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

时间:2017-03-25 23:46:26

标签: neo4j cypher

如果其他节点满足某个条件,我如何用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 (...)或只是CASE,因为'被评估的节点'!='应该被操纵的节点'。 {{1}}表达式似乎也不起作用。 我也尝试过使用fiddle here hack的方法,显然没有任何成功。

请注意,我的用例意味着所涉及的两个节点都已存在(并且是唯一的) 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

您可以使用MATCH(或OPTIONAL MATCH)和WHERE(在此处添加替代标签)来解决您的比较问题。

MATCH (node1:Node{myId:123456}) 
MATCH (node2:Node{myId:654321}) 
WHERE node1.name = "foo" 
SET node2.name = "bar"

WHERE子句仅适用于前一个MATCH,OPTIONAL MATCH或WITH子句。

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

如果这是一个较大查询的片段,并且您想要在不考虑条件的情况下执行操作,请改用OPTIONAL MATCH。它将保留结果行,但如果node1的名称不是'foo',则node2将为null,因此SET操作仍然不会更改任何内容。