Neo4j: Implementierung von Soft Delete mit optionalen Beziehungen

Ich versuche in Neo4j ein soft delete zu implementieren. Die in Cypher aus Alice 'Sicht beschriebene Grafik ist wie folgt:

(clyde:User)<-[:FOLLOWS]-(alice:User)-[:LIKES]->(bob:User)

Anstatt einen Knoten und seine Beziehungen tatsächlich zu löschen, bin ich

Ändern der Bezeichnung, sodass nicht mehr direkt nachgeschlagen werden kann, d. h. Löschen der BezeichnungUser beschriften und hinzufügen a_User Etikett (Unterstrich beachten)Ersetzen seiner Beziehungen, so dass es von meinen normalen Abfragen nicht mehr erreicht werden kann, z. Löschen seiner:FOLLOWS Beziehungen und ersetzen es mit:_FOLLOWS Beziehungen.

Das entspricht also im Grunde dem Verschieben einer Zeile in eine Archivierungstabelle in einer relationalen Datenbank. Ich dachte, dies ist ein ziemlich effizienter Ansatz, da Sie praktisch nie die Teile des Diagramms besuchen, die vorläufig gelöscht wurden. Außerdem müssen Sie keine Ihrer vorhandenen Abfragen ändern.

Das Ergebnis des Soft-Löschens von Alice sollte Folgendes sein:

(clyde:User)<-[:_FOLLOWS]-(alice:_User)-[:_LIKES]->(bob:User)

Mein erster Versuch bei der Abfrage war dieser:

match (user:User {Id: 1})
optional match (user)-[follows:FOLLOWS]->(subject)
remove user:User set user:_User
delete follows
create (user)-[:_FOLLOWS]->(subject);

Das Problem ist, dass die Abfrage versucht, eine Beziehung zwischen zu erstellen, wenn dieser Benutzer niemandem folgtuser undnull Da die zweite Übereinstimmung optional ist, erhalte ich folgenden Fehler:Other node is null.

Mein zweiter Versuch war dieser:

match (user:User {Id: 1})
remove user:User set user:_User
optional match (user)-[follows:FOLLOWS]->(subject)
foreach (f in filter(f in collect({r: follows, n: subject}) where f.r is not null) | delete f.r create (user)-[:_FOLLOWS]->(f.n));

Also füge ich die Beziehung und das Thema in eine Karte ein, sammle diese Karten in einer Sammlung, werfe jede "leere" Karte weg und durchlaufe die Sammlung. Aber diese Abfrage gibt mir diesen Fehler:

SyntaxException: Invalid input '.': expected an identifier character, node labels, a property map, whitespace or ')' (line 1, column 238)

Weiß jemand, wie ich das beheben kann?

Danke, Jan

Antworten auf die Frage(1)

Ihre Antwort auf die Frage