2016-01-11 4 views
5

Я допустил ошибку, несовместимую с типами атрибутов. Для узлов типа «человек» некоторые имеют строку для свойства «external_id», а некоторые имеют int. Я хотел бы удалить все узлы, где свойство является строкой. Выполняется следующий запрос и, кажется, дает правильный ответ.Neo4j/Cypher Удалить с «Неизвестным идентификатором»

MATCH (n:person) 
WHERE TOSTRING(n.external_id) = n.external_id 
RETURN count(n) 

Однако, когда я пытаюсь удалить эти узлы с помощью следующего запроса, я получаю «Неизвестный идентификатор` n`.»:

MATCH (n:person) 
WHERE TOSTRING(n.external_id) = n.external_id 
DELETE n 

Я новичок в Neo4j и Cypher, но это похоже, должно быть довольно просто. Я уже удалил все отношения для этих узлов. Что мне здесь не хватает?

+0

Похоже, исключение синтаксического анализа, вы можете попробовать с 'Detach delete' вместо' delete' –

+0

Я использую Neo4j 2.2.5, так что 'DETACH 'недоступен. Но я не думаю, что это должно иметь значение, узлы, которые я пытаюсь удалить, не имеют никаких отношений. –

+0

Правильно, я только что протестировал в 2.3.1 и без DETACH DELETE он тоже не работал. Я проверю версию 2.2.5. –

ответ

0

Получается, что это ошибка, которую предложил @JeremyKendall. Он появился только потому, что у меня есть ограничение уникальности на person.external_id. Я нашел простой способ обхода путем копирования значения свойства external_id во временное свойство на каждом узле person (без ограничения уникальности), а затем удаление всех узлов, где это временное свойство было строкой.

Смежные вопросы