Ich habe diese Testdatenbank:Cypher: Knoten nicht in derselben Abfrage gefunden
möchte ich mit zwei +B
Knoten auf der rechten Seite, dass der Pfad entfernen. Dieser Fall kann allgemein als ein Pfad beschrieben werden, der PS
Knoten enthält (+B
Knoten sind auch PS
Knoten, die keine eingehende :SOURCE
Kante haben. Der Subpfad, den ich löschen möchte, ist der zwischen (writer)
(exklusive) und und dieser Knoten das hat keine eingehende :SOURCE
Kante (einschließlich)
Dafür habe ich diese Abfrage.
MATCH p1=(writer:A {type:'writer'})-[*]->(Q:PS)-[:TARGET*]->(T)
WITH (Q), (writer)
MATCH (Q)
WHERE NOT()-[:SOURCE]->(Q)
WITH (Q), (writer)
MATCH p2=(writer)-[*]->(Q)
WHERE ANY (x IN NODES(p2)[1..] WHERE x:PS AND NOT()-[:SOURCE]->(x))
WITH REDUCE(s = [], y IN NODES(p2)[1..] | CASE
WHEN y:PS THEN s + y
ELSE s END) AS todo
FOREACH (z IN todo | DETACH DELETE z);
Es identifiziert zuerst die den Knoten (n) und leitet sie dann weiter zu einer neuen Pfad Auswahl zu treffen, dass endet in diesem Knoten. Das alles funktioniert korrekt. Was nicht funktioniert, ist der allerletzte Teil beginnend mit WITH REDUCE
. Es sagt es d oes nicht finden Q
, aber Q
kommt nicht einmal in diesem Teil vor.
Der Fehler ist Node <some ID> not found
. Warum das? Warum findet es den Knoten nicht wieder und warum versucht es überhaupt im letzten Teil? Der letzte Teil wird abgeschnitten und die Abfrage funktioniert bis zu diesem Zeitpunkt wie beabsichtigt.
Nein, die Abfrage für diesen Vey-Knoten zeigt, dass es immer noch da ist. Ich habe den Code trotzdem versucht, aber der gleiche Fehler wie erwartet. –
Ich habe hinzugefügt, was eine viel einfachere Version Ihrer Abfrage sein sollte. Es könnte besser funktionieren. Beachten Sie, dass keine Knotenbezeichner (wie 'Q') verwendet werden müssen. – cybersam
Danke, aber jetzt bekomme ich "Kann NODE mit ID 17049 nicht laden". 'MATCH (N) WO ID (N) = 17049 RETURN N' obwohl gibt diesen exakten Knoten zurück, also ist es * dort. –