Как УДАЛИТЬ узлы или отношения со свойствами NULL в neo4j 2.0 с шифром
Я создал несколько узлов и отношений внутри них. Но при этом что-то случилось не так. Я хочу удалить все узлы, имеющие "SGS", кроме узла с идентификатором 2.
Ниже приведен скрипт, который я запустил для создания узла и отношений:
(Пожалуйста, также предложите, как отредактировать этот, если это возможно)
Я пробовал DELETE (вместе с match, where, IS NULL и т. Д.) Несколькими различными методами проб и ошибок, но не смог добиться того же. Пожалуйста помоги.
3 ответа
Похоже, что все ваши узлы имеют имя, кроме узла, который вы хотите удалить. Так что вы можете попробовать
match n
WHERE NOT (HAS (n.name)) //find all nodes with no name property
with n
match n-[r]-() //find all nodes connected to that node
delete r,n //delete its relations and then the node itself
(примечание не проверено)
Похоже, что в приведенной выше инструкции create вы используете (rkn) вместо (rk), а также, вероятно, (reply) вместо чего-то еще. Поэтому (rkn)-[:READ]->(bk1) просто создаст узел без свойств для представления rkn и отношения READ к OneNight@CallCenter. Вы просто должны проверить и исправить это.
Например, все отношения относятся к узлу с именем (rkn), поэтому я переименовал узел rk в вашем операторе create в rkn. Также убедитесь, что каждый узел, на который вы ссылаетесь в ваших отношениях, действительно отображается на узел в вашем операторе create.
ПРИМЕЧАНИЕ: HAS больше не поддерживается в Cypher, используйте вместо этого EXISTS!
Этот работал для меня
match (n) WHERE NOT (EXISTS (n.name)) DETACH DELETE n
Ничто из вышеперечисленного в настоящее время не будет работать в шифровании.
Попробуйте зашифровать запрос ниже. Это работает:
//находим все узлы без свойства name.
СОВПАДЕНИЕ (n) ГДЕ НЕ ((n.name)НЕ NULL)
//отсоединяем все его связи и удаляем найденный узел, т.е. пустой узел.
ОТДЕЛИТЬ УДАЛИТЬ n