以下示例来自找到here的Neo4j文档。
使用Cypher,可以使用Cypher语句删除单个已知标签,如下所示:
MATCH (n { name: 'Peter' })
REMOVE n:German
RETURN n
您还可以删除多个标签,如下所示:
MATCH (n { name: 'Peter' })
REMOVE n:German:Swedish
RETURN n
那么如何使用简单的Cypher语句从节点中删除所有标签?
答案 0 :(得分:1)
目前还没有语法!标签通常是已知数量的东西,因此如果需要,您可以将它们全部列出。但是,没有动态的方法将它们全部删除。
答案 1 :(得分:1)
那么,两步密码方法怎么样?使用cypher生成一些cypher语句,然后在shell中执行cypher语句。
您可以尝试这样的方法来生成批处理密码语句
match (n)
return distinct "match (n"
+ reduce( lbl_str= "", l in labels(n) | lbl_str + ":" + l)
+ ") remove n"
+ reduce( lbl_str= "", l in labels(n) | lbl_str + ":" + l)
+ ";"
输出应该看起来像这样......
match (n:Label_1:Label_2) remove n:Label_1:Label_2;
match (n:Label_1:Label_3) remove n:Label_1:Label_3;
match (n:Label_2:Label_4) remove n:Label_2:Label_4;
您可能希望删除任何重复项,并且根据您的数据,可能会有相当多的重复项。
不完全是你正在寻找的东西,但我认为它只会使用cypher和neo4j shell来达到同样的最终状态。
闪亮的新的和改进的密码......
我将其编辑为仅在浏览器中可用的内容。它暗示这是一个更好的解决方案。它仍然是两个步骤,但它产生一个可以剪切并粘贴到浏览器中的语句。
match (n)
with distinct labels(n) as Labels
with reduce(lbl_str="", l in Labels | lbl_str + ":" + l) as Labels
order by Labels
with collect(Labels) as Labels
with Labels, range(0,length(Labels) - 1) as idx
unwind idx as i
return "match (n" + toString(i) + Labels[i] + ")" as Statement
union
match (n)
with distinct labels(n) as Labels
with reduce(lbl_str="", l in Labels | lbl_str + ":" + l) as Labels
order by Labels
with collect(Labels) as Labels
with Labels, range(0,length(Labels) - 1) as idx
unwind idx as i
return "remove n" + toString(i) + Labels[i] as Statement
产生这样的输出......
match (n0:Label_A)
match (n1:Label_B)
match (n2:Label_C:Label_D)
match (n3:Label_E)
remove n0:Label_A
remove n1:Label_B
remove n2:Label_C:Label_D
remove n3:Label_E
然后可以剪切并粘贴到Neo4j浏览器中。
答案 2 :(得分:1)
您还可以使用doIt
库中的apoc
方法尝试这种方式:
match (n {name: 'Peter'})
call apoc.cypher.doIt(
"match (o)" +
" where ID(o) = " + ID(n) +
" remove "+reduce(a="o",b in labels(n) | a+":"+b) +
" return (o);",
null)
yield value
return value