我尝试编写一个cypher查询来提取一组标签,这些标签共享一个特定的标签。选择标签后,我会尝试重命名它们。这意味着向每个标签添加前缀,并在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来运行这个查询。我分别尝试了第一部分,即在with之后返回nl & cl。这可以很好地工作。我还尝试对一个特定的cl和cl使用rename函数,该cl和cl是在尝试查询的第一部分时获得的。这也运行得很好。只有这种组合似乎不起作用。
编辑:
我发现,每次解开似乎都会破坏查询,无论我是否使用由解开定义的变量。产生相同错误的最小示例:
unwind [1,2,3,4] as cl
call apoc.refactor.rename.label("Test", "Test")
return cl
提前感谢您的帮助或解决方案。
发布于 2019-02-20 23:38:43
好的,在尝试之后,我把它弄明白了。您需要生成调用返回的至少一个字段,例如:
unwind [1,2,3,4] as cl
call apoc.refactor.rename.label("Test", "Test")
yield total
return null // everything is possible for return.
我不知道为什么它能工作,但它能工作。也许它必须对过程产生的流做一些事情,但我真的不确定。如果有人知道它为什么能解决我的问题,请发表评论。
https://stackoverflow.com/questions/54788832
复制相似问题