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 有更多信息,以及(可以说)不太难读的替代方案。