我正在使用 Neo4j 数据库,并尝试在 Issue 节点和 Version 节点之间创建 :Impact 关系,这些关系从 firstAffected 到 fixedVersion。但是,从结果可以看出,并非所有关系都已创建。
这是我的疑问:
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)
查询没有将影响关系添加到版本 7。我预计路径中的所有版本都将链接到问题,但事实并非如此。
如何修改查询以正确创建 firstAffected 和 fixedVersion 之间所有版本的影响关系?
看起来您正在尝试将问题与每个版本(第一个受影响的版本或未修复的每个下游版本)添加关系。一种不错的方法是使用带有内联谓词的量化路径模式:
它会尽可能地遍历,直到走到尽头(如版本 7)或刚好遇到修复版本(如版本 2)。它使用谓词
NOT EXISTS { (r)<-[:Fixed]-(issue) }
在版本 3 之前停止,因为版本 3 引入了修复。