如果其他节点满足某个条件,我如何用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的方法,显然没有任何成功。
请注意,我的用例意味着所涉及的两个节点都已存在(并且是唯一的) 有什么建议吗?
答案 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操作仍然不会更改任何内容。