2016-01-11 11 views
5

Ho commesso l'errore di essere incoerente con i tipi di attributo. Per i nodi di tipo "persona", alcuni hanno una stringa per la proprietà "external_id" e alcuni hanno un int. Vorrei eliminare tutti i nodi in cui la proprietà è una stringa. La seguente query viene eseguita e sembra fornire una risposta corretta.Neo4j/Cypher Elimina con "Identificatore sconosciuto"

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

Tuttavia, quando provo a cancellare quei nodi utilizzando la seguente query, ottengo "` n` identificatore sconosciuta.":

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

Sono nuovo di Neo4j e Cypher, ma questo sembra che dovrebbe essere piuttosto semplice. Ho già eliminato tutte le relazioni per questi nodi. Cosa mi manca qui?

+0

Sembra un'eccezione parse, si può provare con 'DETACH DELETE' invece di' DELETE' –

+0

sto usando Neo4j 2.2.5, così 'DETACH 'non è disponibile. Ma non penso che dovrebbe importare, i nodi che sto cercando di eliminare non hanno alcuna relazione. –

+0

Bene, ho appena provato in 2.3.1 e senza DETACH DELETE non funzionava neanche. Creerò una versione 2.2.5 da verificare. –

risposta

0

Si scopre che si tratta di un errore suggerito da @JeremyKendall. È venuto fuori solo perché ho un vincolo di unicità su person.external_id. Ho trovato una soluzione semplice copiando il valore della proprietà external_id in una proprietà temporanea su ciascun nodo person (senza un vincolo di univocità) e quindi eliminando tutti i nodi in cui tale proprietà temporanea era una stringa.

Problemi correlati