Cypher - 条件 where 子句
Cypher - conditional where clause
我正在尝试通过 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。
有没有办法在查询本身中编写该逻辑?
这可能对您有所帮助,在 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
我正在尝试通过 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。
有没有办法在查询本身中编写该逻辑?
这可能对您有所帮助,在 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