Neo4j: Cypher: Как убрать ярлыки по шаблону? - PullRequest
1 голос
/ 27 октября 2019

У меня есть база данных Neo4j, где каждый узел имеет метки, начинающиеся с подчеркивания.

Например, (:User,_User), (:Store,:_Store) и т. Д.

Эти метки подчеркивания были созданы Spring Data Neo4j, и теперь я хочуизбавиться от них (call db.schema() возвращает их как отдельный узел в схеме).

Цель получить только (:User), (:Store).

Есть ли способ сделать это с помощью какого-либо запроса

1 Ответ

1 голос
/ 27 октября 2019

Если вы удалите метки, которые начинаются с подчеркивания (например, _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
...