0

我已经看到了多个 cypher FOREACH 语句的示例,它们在方括号中引用了数字 1,但我找不到关于它的文档。这是一份工作声明:

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文档对 FOREACH 的描述非常简单,并且不会使用方括号或在 THEN 子句中使用 1。

4

1 回答 1

1

支持语句的条件执行有点小技巧。本质上,它等价于以下伪代码:

IF (rel IS NOT NULL) THEN {
   DELETE rel CREATE (newest)-[:NEXT_SUB_REPLY]->(prevNewest))
}

FOREACH将遍历一个集合并为集合的每个元素执行一些操作。如果集合中没有元素,则操作不会运行。如果集合中有一个元素,它将运行一次。

至于为什么它[1]在查询中,它实际上并不重要,它基本上只是惯例和个人喜好。它与任何单元素集合的工作方式相同——例如[true],或者[null]两者都足够了。重要的是该CASE语句的真实部分返回一个元素数组,否则返回一个零元素数组。

如果您愿意依赖 APOC 库,这些文档有更多信息,以及(可以说)不太可读的替代方案。

于 2020-10-22T16:30:24.210 回答