执行查询时,Neo4j 中并未添加所有影响关系

问题描述 投票:0回答:1

我的数据库: My Neo4J Database

我正在使用 Neo4j 数据库,并尝试创建从firstAffected到fixedVersion的Issue节点和Version节点之间的影响关系。然而,从结果来看,并不是所有的关系都被创建了。

这是我的询问:

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 之间的所有版本创建影响关系?

database neo4j
1个回答
0
投票

您似乎正在尝试将问题与每个版本(第一个受影响的版本或每个没有修复的下游版本)之间的关系添加起来。一个很好的方法是使用带有内联谓词的量化路径模式

MATCH (issue:Issue {name: "Issue 1"})-[:First_Affected]->(firstAffected:Version)
      (()<-[:NEXT_VERSION]-(r:Version) WHERE NOT EXISTS { (r)<-[:Fixed]-(issue) } )*
      (impactedVersion:Version)
WITH DISTINCT issue, impactedVersion
CREATE (issue)-[:Impact]->(impactedVersion)

这将尽可能地遍历,直到遇到死胡同(如版本 7)或在遇到修复版本之前(如版本 2)。它使用谓词

NOT EXISTS { (r)<-[:Fixed]-(issue) }
在版本 3 之前停止,这是引入修复的地方。

© www.soinside.com 2019 - 2024. All rights reserved.