Estou trabalhando com um banco de dados Neo4j e tentando criar relacionamentos :Impact entre o nó Issue e os nós Version que seguem de firstAffected para fixedVersion. No entanto, como visto no resultado, nem todos os relacionamentos estão sendo criados.
Aqui está minha pergunta:
MATCH (issue:Issue {name: "Issue 1"})
MATCH (firstAffected:Version)<-[:First_Affected]-(issue), (fixedVersion:Version)<-[:Fixed]-(issue)
WITH fixedVersion, firstAffected, issue
MATCH path = (firstAffected)<-[:NEXT_VERSION*]-(fixedVersion)
WITH nodes(path) AS allNodes, issue
WITH allNodes[..-1] AS impact_target_nodes, issue
UNWIND impact_target_nodes AS targetNode
CREATE (issue)-[:Impact]->(targetNode)
A consulta não adiciona o relacionamento de Impacto à Versão 7. Espero que todas as versões no caminho sejam vinculadas ao Problema, mas esse não é o caso.
Como posso modificar a consulta para criar corretamente relacionamentos de impacto para todas as versões entre firstAffected e fixedVersion?
Parece que você está tentando adicionar um relacionamento do problema para cada versão que seja a primeira versão impactada ou cada versão downstream que não tenha a correção. Uma boa maneira de fazer isso é usar um padrão de caminho quantificado com um predicado inline:
Isso percorrerá o máximo que puder até chegar a um beco sem saída (como na versão 7) ou logo antes de encontrar a versão com uma correção (como na versão 2). Ele usa o predicado
NOT EXISTS { (r)<-[:Fixed]-(issue) }
para parar antes da versão 3, que é onde a correção foi introduzida.