Neo4j apoc重构过程不支持隐式命名错误

Neo4j apoc重构过程不支持隐式命名错误,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我尝试编写一个密码查询,提取一组共享一个特定标签的标签。选择标签后,我尝试重命名它们。这意味着为每个标签添加前缀,并在apoc.refactor.rename.label的帮助下在图中命名标签。因此,我编写了以下查询 match (c:TheLabel) with collect(distinct filter( l in labels(c) where not l in ["UNIQUE IMPORT LABEL","TheLabel"])[0]) as curr_label unwind

我尝试编写一个密码查询,提取一组共享一个特定标签的标签。选择标签后,我尝试重命名它们。这意味着为每个标签添加前缀,并在apoc.refactor.rename.label的帮助下在图中命名标签。因此,我编写了以下查询

match (c:TheLabel) 
with collect(distinct filter( l in labels(c) where not l in ["UNIQUE IMPORT LABEL","TheLabel"])[0]) as curr_label 
unwind curr_label as cl 
with cl as cl, "AR_"+cl as nl
call apoc.refactor.rename.label(cl, nl) 
return null
但此查询失败,并显示以下错误消息:

Neo.ClientError.Statement.SyntaxError: Procedure call inside a query does not support naming results implicitly (name explicitly using `YIELD` instead) (line 5, column 1 (offset: 214))
"call apoc.refactor.rename.label(cl, nl) return null"
我不明白在哪里可以使用yield来运行这个查询。 我分别尝试了第一部分,即在使用后返回nl和cl。这个很好用。我还尝试将rename函数用于一个特定的cl和cl,这是我在尝试查询的第一部分时得到的。这也很有效。只有这种组合似乎不起作用

编辑:

我发现,如果我使用由unwind或not定义的变量,每次unwind似乎都会破坏查询。 产生相同错误的最小示例:

unwind [1,2,3,4] as cl 
call apoc.refactor.rename.label("Test", "Test") 
return cl

提前感谢您提供的任何帮助或解决方案。

好的,在尝试之后,我找到了答案。您需要至少生成一个调用返回字段,例如:

unwind [1,2,3,4] as cl 
call apoc.refactor.rename.label("Test", "Test") 
yield total
return null // everything is possible for return.

我不知道它为什么起作用,但它起作用了。也许它与过程产生的流有关,但我真的不确定。如果有人知道它为什么能解决我的问题,请发表评论。

好的,我试了一下,找到了答案。您需要至少生成一个调用返回字段,例如:

unwind [1,2,3,4] as cl 
call apoc.refactor.rename.label("Test", "Test") 
yield total
return null // everything is possible for return.

我不知道它为什么起作用,但它起作用了。也许它与过程产生的流有关,但我真的不确定。如果有人知道它为什么解决了我的问题,请发表评论。

如果定义了一个过程来返回任何结果,那么Cypher语言要求该子句必须与YIELD子句配对-即使您不关心任何结果。唯一的例外是,当整个Cypher语句只包含一个CALL子句时,这在文档中称为独立过程调用

引自:

如果被调用的过程声明了至少一个结果字段,则可能会产生 一般不可省略。然而,在一种情况下,收益率可能总是被忽略 独立过程调用。在这种情况下,将生成所有结果字段 作为从过程调用到用户的新绑定变量


如果一个过程被定义为返回任何结果,那么Cypher语言要求该子句必须与YIELD子句成对出现——即使您不关心任何结果。唯一的例外是,当整个Cypher语句只包含一个CALL子句时,这在文档中称为独立过程调用

引自:

如果被调用的过程声明了至少一个结果字段,则可能会产生 一般不可省略。然而,在一种情况下,收益率可能总是被忽略 独立过程调用。在这种情况下,将生成所有结果字段 作为从过程调用到用户的新绑定变量