Cypher - 如何在循环中多次调用一个过程?

Cypher - How to call a procedure multiple times in loop?

在Neo4j浏览器中,我试图在循环中多次调用一个过程,但Neo4j报同样的错误:Query cannot conclud with CALL (must be RETURN or an update clause )。具体来说,

UNWIND [10, 20] AS age_num
MATCH (n:User {name: 'a', age: age_num})
CALL apoc.nodes.delete(n)

...得到 Neo.ClientError.Statement.SyntaxError:

Query cannot conclude with CALL (must be RETURN or an update clause) (line 3, column 1 (offset: 68))
"CALL apoc.nodes.delete(n)"
 ^
CALL apoc.periodic.iterate(
    "UNWIND [10, 20] AS age_num MATCH (n:User {name: 'a', age: age_num}) RETURN n",
    "CALL apoc.nodes.delete(n)",
    {batchMode: 'SINGLE', parallel: false}
)

...得到 errorMessages:

{
  "Query cannot conclude with CALL (must be RETURN or an update clause) (line 1, column 15 (offset: 14))\r\n\" WITH $n AS n CALL apoc.nodes.delete(n)\"\r\n               ^": 1
}

这里的过程apoc.nodes.delete()只是一个例子。请不要建议我改用 DETACH DELETE

问题: 在Cypher中,如何在循环中多次调用一个过程,每次可能有不同的参数,例如不同的 属性 值?

环境:Neo4j 桌面 v4.0.4,Windows8.1 x64。

您必须在查询末尾添加一个 RETURN 语句,如错误状态。基本上,如果您只调用一个过程,那么 cypher 不会用这个来打扰您。但是,如果您在过程调用之前执行任何类型的 MATCH,则必须以 RETURN 结束查询。您也可以只使用 DETACH DELETE cypher 语句。

带有 DETACH DELETE 的版本:

UNWIND [10, 20] AS age_num
MATCH (n:User {name: 'a', age: age_num})
DETACH DELETE n

带 APOC 的版本:

UNWIND [10, 20] AS age_num
MATCH (n:User {name: 'a', age: age_num})
CALL apoc.nodes.delete(n) YIELD value
RETURN distinct 'done'

编辑:我已根据 OP 评论修复了输出