web-dev-qa-db-ja.com

neo4jのノードラベルを変更する

間違ったラベルでノードを作成しました。
ノードラベルまたは関係タイプを再作成せずに変更する方法はありますか?私は何かを試しました

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

しかしそれは誤りです...

20
tsdaemon

ラベルに関連付けられているノードは変更できますが、関係のタイプは変更できません。概念的には、ある鶏舎から鶏肉を取り出して別の鶏小屋に入れても、鶏肉の内容は変更されていません。しかし、鶏肉をオーブンから取り出して口に入れると、鶏肉ではなくなります(あいまいな場合を除きます)。 Charlieではなく、猫をWhiskersと呼ぶこともできますが、猫ではなくペットのアナコンダが必要な場合は、新しい名前の猫。同様に、ノードは異なるラベルのメンバーになり、同じノードのままにすることができますが、関係のタイプは構成的です。したがって、ラベルは好きなように追加したり削除したりできますが、別の関係タイプが必要な場合は、実際に必要なのは別の関係です。これが、リレーションシップのタイプが1つだけである理由でもありますが、ノードは多くのラベルを持つことができます。

ラベルはノードの任意のセットまたはバッグです。バッグを交換するための文法はすでに与えられていますが、完全を期すために:

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)
20
jjaderberg
MATCH (n:OLD_LABEL {id:14})
REMOVE n:OLD_LABEL
SET n:NEW_LABEL

このクエリはそれ自体を説明すると思います。

27
tstorms

これは、複数のノードのラベルを同時に変更する場合に機能します。

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

これを試して:

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