Выполнение этого при Neo4j 2.0.Смутно о поведении опционального предложения MATCH
Я разработал систему типа Node, используя свойство массива под названием «тип». Это было сделано до ярлыков, и я, вероятно, в конце концов переключится на использование меток. На данный момент, у меня есть следующий запрос на удаление:
START n = node(*) OPTIONAL MATCH n-[r]-() WHERE ANY(x in n.type WHERE x = 'TestType') DELETE n, r
Обратите внимание, что до Neo4j 2.0, я использовал следующий запрос, который работал отлично:
START n = node(*) MATCH n-[r?]-() WHERE ANY(x in n.type WHERE x = 'TestType') DELETE n, r
Цель состоит в том, чтобы удалить все узлы с типом 'TestType. (Предложение OPTIONAL MATCH позволяет удалить любые отношения, которые могут существовать, чтобы узлы могли быть удалены.) Однако это приводит к удалению узлов других типов. Если я удалю опцию OPTIONAL MATCH (и предполагая, что узлы не имеют отношений), это работает так, как ожидалось, и удаляются только узлы типа «TestType».
При попытке отладить это, я изменил DELETE на RETURN и увидел, что с предложением OPTIONAL MATCH были возвращены узлы всех типов. Когда я удалял предложение OPTIONAL MATCH, возвращались только узлы типа «TestType».
Является ли это ошибкой, или я не правильно использую ДОПОЛНИТЕЛЬНЫЙ МАТЧ?
Спасибо.
Добавление:
Запрос предложенный Dan G произвел те же неправильные результаты. Все узлы были найдены, а не только узлы с данным типом. Однако следующий запрос работал, хотя я не совсем понимаю, почему мне нужно сделать, это:
START n=node(*)
WHERE 'TestType' IN n.`Node-typenames`
WITH n
OPTIONAL MATCH n-[r]-() DELETE n,r
Может кто-то поможет мне лучше понять это?
Обновлено сообщение с дополнительной информацией – bjlevine