各ノードにアンダースコアで始まるラベルがあるNeo4jデータベースがあります。
たとえば、(:User,_User), (:Store,:_Store)
など。
これらのアンダースコアラベルはSpringData Neo4jによって生成されたので、削除したいと思います(call db.schema()
スキーマ内の個別のノードとして返します)。
取得するだけの目標(:User), (:Store)
。
クエリでそれを行う方法はありますか?
アンダースコア(例_User
)で始まるラベルをそれらのノードから削除し、アンスコアのない値に置き換えると、を呼び出してdb.schema()
も値が返されなくなります。
あなたはこのようなことをすることができます...
MATCH (n:_User)
SET n:User
REMOVE n:_User
フィードバックに基づいて回答を更新しました。APOCを使用してこのようなことを行うことができます。
// get all labels that start with underscore
CALL db.labels()
YIELD label AS old_label
WHERE old_label STARTS WITH '_'
WITH old_label, substring(old_label, 1, length(old_label)) AS new_label
// match the nodes for one of the underscore labels
MATCH (n)
WHERE old_label IN labels(n)
WITH old_label, new_label, collect(n) AS relabel_nodes
// call removeLabels with the list of nodes and list od labels to remove
CALL apoc.create.removeLabels(relabel_nodes, [old_label])
YIELD node AS removed_label_node
// call addLabels with the new label to add
WITH removed_label_node, new_label
CALL apoc.create.addLabels(removed_label_node, [new_label])
YIELD node AS added_label_node
RETURN added_label_node
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加