如何通过Cypher干净替换Neo4j节点的标签列表?
替换Neo4j节点标签为新标签列表的简洁方法
目前Neo4j原生Cypher没有像替换属性(SET n = {foo: 42, bar: 69})那样一步到位的标签替换语法,但可以通过组合操作实现,无需预先知晓节点原有标签:
原生Cypher实现
使用REMOVE清除所有旧标签,再用SET添加新标签列表:
MATCH (n) // 移除节点全部原有标签 REMOVE n:[labels(n)] // 设置新标签列表 SET n:$newLabels
labels(n)会返回节点当前的所有标签集合,REMOVE n:[labels(n)]可一次性清除所有旧标签$newLabels是参数化的标签列表,比如["Foo", "Bar"]- 若只需替换特定节点,修改
MATCH条件即可(比如MATCH (n:OldTargetLabel)或按属性匹配)
借助APOC库简化操作
如果你的Neo4j安装了APOC扩展库,可以用apoc.create.setLabels函数一步完成替换:
MATCH (n) CALL apoc.create.setLabels(n, $newLabels) YIELD node RETURN node
这个函数会直接将节点标签替换为传入的列表,自动处理旧标签的移除,语法更简洁。
内容的提问来源于stack exchange,提问作者Jeroen De Dauw
相关产品推荐
相关产品推荐

