2016-01-11 2 views
5

Ich habe den Fehler gemacht, mit Attributtypen zu inkonsistent zu sein. Für Knoten vom Typ "person" haben einige eine Zeichenfolge für die Eigenschaft "external_id" und einige haben eine int. Ich möchte alle Knoten löschen, bei denen die Eigenschaft eine Zeichenfolge ist. Die folgende Abfrage wird ausgeführt und scheint eine korrekte Antwort zu geben.Neo4j/Cypher Löschen mit Where "Unbekannter Bezeichner"

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

Allerdings, wenn ich versuchen, diese Knoten mithilfe der folgenden Abfrage zu löschen, erhalte ich "Unknown Kennung` n`.":

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

Ich bin neu zu Neo4j und Cypher, aber das scheint, als sollte es ziemlich einfach sein. Ich habe bereits alle Beziehungen für diese Knoten gelöscht. Was fehlt mir hier?

+0

Scheint wie eine Parse-Ausnahme festgelegt wurde, können Sie versuchen, mit 'DETACH delete' statt' delete' –

+0

Ich verwende Neo4j 2.2.5, so 'DETACH 'ist nicht verfügbar. Aber ich denke nicht, dass das wichtig sein sollte, die Knoten, die ich löschen möchte, haben keine Beziehungen. –

+0

Richtig, also ich habe gerade in 2.3.1 getestet und ohne DETACH DELETE funktionierte es auch nicht. Ich werde eine Version 2.2.5 zur Überprüfung aufdrehen. –

Antwort

0

Es stellt sich heraus, dass dies ein Fehler ist, wie @ JeremyKendall vorgeschlagen. Es kam nur, weil ich eine Eindeutigkeitseinschränkung auf habe. Ich habe eine einfache Problemumgehung gefunden, indem ich den Wert der external_id -Eigenschaft in eine temporäre Eigenschaft auf jedem -Knoten (ohne Eindeutigkeitsbeschränkung) kopiert und dann alle Knoten gelöscht habe, bei denen diese temporäre Eigenschaft eine Zeichenfolge war.