2016-12-01 4 views
0

Я пытаюсь удалить свойство из всех узлов, которые содержат это свойство. Код, который я использую:Neo4j Ожидаемый узел, отношение или путь, но получил строку

call apoc.periodic.commit(" 
match (p:Person) 
with p limit {limit} 
delete p.county 
return count(*) 
",{limit:10000}) 

, но я получаю следующее сообщение об ошибке: Expected a Node, Relationship or Path, but got a String.

Кто-нибудь знает, что вызывает эту ошибку и как ее решить?

+0

Какая версия вы используете? Этот запрос отлично работает с 3.0.6 с APOC 3.0.4.2 в пустой базе данных. (Btw - 'p.county' может быть или не быть опечаткой.) –

+0

Neo4j - 3.0.6, а APOC - 3.0.4.2. Это не опечатка, а также попытка удалить другую собственность, но я получил ту же ошибку – Porjaz

+0

Я вижу. Я действительно могу воспроизвести вашу ошибку, используя один узел: 'CREATE (p: Person {name: 'p1', county: 'c1'})' –

ответ

1

Согласно Cypher documentation:

The DELETE clause is used to delete graph elements — nodes, relationships or paths.

Для удаления свойства, используйте REMOVE пункт:

The REMOVE clause is used to remove properties and labels from graph elements.

Это дает следующий запрос:

CALL apoc.periodic.commit(" 
    MATCH (p:Person) 
    WITH p LIMIT {limit} 
    REMOVE p.county 
", {limit:10000}) 

Как ни странно, используя RETURN индуцирует какой-то бесконечный цикл для m e, и запрос не завершится, поэтому я удалил пункт RETURN.

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