首页 > 解决方案 > Cypher - 条件 where 子句

问题描述

我正在尝试按 id 或名称更新用户主题名称。目前我的查询是这样的:

 MATCH (s:Subject)-[:REGISTERED-BY]->(u:User{id: 1})
 WHERE s.name="Math" or s.id=""
 SET s.name = "Maths"
 RETURN s

如果我只使用没有 的名称OR,它可以工作。如果我只使用 ID 并将名称保留为空字符串,它就可以工作。但是,如果我在 OR 子句中使用名称并将 id 留空。更新不会发生我需要有条件地更新名称,具体取决于名称是否可用或 id。id 字段是一个 UUID。有没有办法在查询本身中编写该逻辑?

标签: neo4jcypher

解决方案


这可能会对您有所帮助,在 Neo4j 中,您可以使用两个选项执行条件操作。

如果您有权访问 APOC,则可以使用APOC.do.when

MATCH (s:Subject)-[:REGISTERED-BY]->(u:User{id: 1})

WHERE ...

CALL apoc.do.when(s.name="Math", "SET s.name = \"Maths\"", "", {}) YIELD value as _

RETURN s

第二个是更原生的FOREACH

MATCH (s:Subject)-[:REGISTERED-BY]->(u:User{id: 1})

WHERE ...

FOREACH(_ IN CASE s.name WHEN "Math" THEN [1] ELSE [] END | SET s.name = "Maths" )

RETURN s

推荐阅读