Neo4j/Cypher FOREACH 方括号和使用 "THEN [1]"
Neo4j/Cypher FOREACH square brackets and use of "THEN [1]"
我见过多个引用方括号中的数字 1 的 cypher FOREACH 语句示例,但我找不到相关文档。这是一份工作声明:
FOREACH(i in CASE WHEN NOT rel IS NULL THEN [1] ELSE [] END |
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest))
虽然我很高兴它能正常工作,但我想了解更多关于方括号的使用和数字 1 的使用。从上下文中我了解到它会循环,当
CASE WHEN NOT rel IS NULL
为真,则执行
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest)
否则它什么都不做。 Neo4j docs 在 FOREACH 上非常简单,既不使用方括号也不在 THEN 子句中使用 1。
支持语句的条件执行有点麻烦。本质上,它等同于以下伪代码:
IF (rel IS NOT NULL) THEN {
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest))
}
FOREACH
将迭代一个集合并对集合中的每个元素执行一些操作。如果集合中没有元素,则不会进行操作 运行。如果集合中有一个元素,它将 运行 一次。
至于为什么在查询中是[1]
,其实无所谓,基本上只是约定俗成,看个人喜好。它与任何 one-element 集合的工作方式相同 - 例如 [true]
或 [null]
都应该足够了。重要的是 CASE
语句的真实部分 returns 一个 one-element 数组,否则 zero-element 数组。
如果您愿意依赖 APOC 库,The docs 有更多信息,以及(可以说)不太难读的替代方案。
我见过多个引用方括号中的数字 1 的 cypher FOREACH 语句示例,但我找不到相关文档。这是一份工作声明:
FOREACH(i in CASE WHEN NOT rel IS NULL THEN [1] ELSE [] END |
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest))
虽然我很高兴它能正常工作,但我想了解更多关于方括号的使用和数字 1 的使用。从上下文中我了解到它会循环,当
CASE WHEN NOT rel IS NULL
为真,则执行
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest)
否则它什么都不做。 Neo4j docs 在 FOREACH 上非常简单,既不使用方括号也不在 THEN 子句中使用 1。
支持语句的条件执行有点麻烦。本质上,它等同于以下伪代码:
IF (rel IS NOT NULL) THEN {
DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest))
}
FOREACH
将迭代一个集合并对集合中的每个元素执行一些操作。如果集合中没有元素,则不会进行操作 运行。如果集合中有一个元素,它将 运行 一次。
至于为什么在查询中是[1]
,其实无所谓,基本上只是约定俗成,看个人喜好。它与任何 one-element 集合的工作方式相同 - 例如 [true]
或 [null]
都应该足够了。重要的是 CASE
语句的真实部分 returns 一个 one-element 数组,否则 zero-element 数组。
The docs 有更多信息,以及(可以说)不太难读的替代方案。