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
(documentation):
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)"
^
- 与
apoc.periodic.iterate()
(documentation):
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 评论修复了输出
在Neo4j浏览器中,我试图在循环中多次调用一个过程,但Neo4j报同样的错误:Query cannot conclud with CALL (must be RETURN or an update clause )。具体来说,
- 与
UNWIND
(documentation):
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)"
^
- 与
apoc.periodic.iterate()
(documentation):
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 评论修复了输出