我尝试动态更新节点的标签,但没有成功。我想删除节点的所有标签,然后我想为同一节点设置新的标签列表。
我的方法(失败,尝试仅删除标签):
WITH ['a','b','c'] as newlabels
MATCH (n:people{name:'mam'})
WITH n,newlabels,labels(n) as oldlabels
FOREACH (l in oldlabels | REMOVE n:l)
SET n:newlabels
RETURN labels(n)
我怀疑,标签不能使用引用动态更改。我的理解是否正确?我们怎样才能做到这一点?
答案 0 :(得分:3)
否,因为您说使用原始密码无法进行动态标签修改。主要是因为标签,属性键,关系类型是查询计划的一部分并用于缓存。
可以使用APOC程序动态添加标签,如下所述:
MATCH (n:Movie)
CALL apoc.create.addLabels( id(n), [ n.genre ] ) YIELD node
REMOVE node.studio
RETURN node
可能替换/删除现有标签的功能可能是APOC的一个很好的补充。
<强>更新强>
在检查APOC的来源之后,有一个setLabels程序将删除不匹配的传递标签,例如:
WITH ["A","B"] as labels
MATCH (m:Movie)
WITH collect(id(m))[0..20] as movies, labels
CALL apoc.create.setLabels(movies, labels) YIELD node RETURN node, labels(node)
│node │labels(node)│
╞══════════════════════════════╪════════════╡
│{tagline: Prepare to enter a s│[B, A] │
│ecret world of assassins, titl│ │
│e: Ninja Assassin, released: 2│ │
│009} │ │
├──────────────────────────────┼────────────┤
│{tagline: Walk a mile you'll n│[B, A] │
│ever forget., title: The Green│ │
│ Mile, released: 1999} │ │
├──────────────────────────────┼────────────┤
│{tagline: 400 million people w│[B, A] │
│ere waiting for the truth., ti│ │
│tle: Frost/Nixon, released: 20│ │
│08} │ │
├──────────────────────────────┼────────────┤
│{tagline: He didn't want law. │[B, A] │
│He wanted justice., title: Hof│ │
│fa, released: 1992} │ │
├──────────────────────────────┼────────────┤
问题解决了:))