Neo4j: implementando delete soft com relacionamentos opcionais

Estou tentando implementar uma exclusão suave no Neo4j. O gráfico descrito em Cypher do ponto de vista de Alice é como tal:

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

Em vez de realmente excluir um nó e seus relacionamentos, eu sou

mudando seu rótulo para que ele não possa mais ser consultado diretamente, ou seja,User rotular e adicionar um_User label (observe o sublinhado)substituindo seus relacionamentos para que ele não possa mais ser alcançado por minhas consultas normais, por exemplo, excluindo sua:FOLLOWS relações e substituí-lo por:_FOLLOWS relacionamentos.

Portanto, isso é basicamente o equivalente a mover uma linha para uma tabela de arquivamento em um banco de dados relacional. Eu percebi que essa é uma abordagem bastante eficiente, porque você nunca está visitando as partes do gráfico que foram excluídas por software. Além disso, você não precisa modificar nenhuma das suas consultas existentes.

O resultado da exclusão suave de Alice deve ser este:

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

Minha primeira tentativa na consulta foi esta:

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

O problema é que quando este usuário não está seguindo ninguém, a consulta tenta criar um relacionamento entreuser enull porque a segunda correspondência é opcional, então isso me dá esse erro:Other node is null.

Minha segunda tentativa foi essa:

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));

Por isso, estou colocando o relacionamento e o assunto em um mapa, coletando esses mapas em uma coleção, jogando todos os mapas "vazios" e passando pela coleção. Mas esta consulta me dá este erro:

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

Alguém sabe como eu posso consertar isso?

Obrigado, jan

questionAnswers(1)

yourAnswerToTheQuestion