在neo4j中更改节点标签

时间:2014-03-20 19:07:58

标签: neo4j cypher

我创建了一个标签错误的节点 有没有办法在不重新创建节点标签或关系类型的情况下更改它? 我尝试过像

这样的东西
  

MATCH n WHERE Id(n)= 14 SET n.Labels =' Person'

但这是错误的......

4 个答案:

答案 0 :(得分:26)

MATCH (n:OLD_LABEL {id:14})
REMOVE n:OLD_LABEL
SET n:NEW_LABEL

猜猜这个问题解释了自己。

答案 1 :(得分:18)

您可以更改与标签关联的节点,但无法更改关系类型。从概念上讲,如果你将鸡肉从一个鸡舍中取出并放入另一个鸡舍中,你就不会改变鸡肉的含量。但是当你将鸡肉从烤箱中取出并放入口中时,它就不再是鸡了(除了模棱两可)。您可以决定拨打猫 Whiskers 而不是 Charlie ,但如果您决定要为宠物而不是猫而使用anaconda,则无法帮助给猫一个新名字。类似地,节点可以是不同标签的成员并且保持相同的节点,但是关系的类型是组成型的。所以:您可以随意添加和删除标签,但如果您想要不同的关系类型,那么您想要的实际上是一种不同的关系。这也是关系只有一种类型,但节点可以有多个标签的原因。

标签是任意组或节点袋。已经给出了换袋的语法,但为了完整性:

MATCH (n)
WHERE ID(n) = 14 
REMOVE n:Whiskers
SET n:Charlie

MATCH (petless_and_unhappy)-[whiskers:CAT]->(petful_and_unhappy)
DELETE whiskers
CREATE (petless_and_unhappy-[sir_hiss:ANACONDA]->(peftul_and_happy)

答案 2 :(得分:1)

这应该可以同时更改多个节点上的标签:

MATCH (n:OLD_LABEL)
WHERE ID(n) IN [7, 8]
REMOVE n:OLD_LABEL
SET n:NEW_LABEL

答案 3 :(得分:0)

尝试一下:

Match (n:person{name:'John Jjones'}) Set n.name = 'John Jones'