获取具有特定节点值的最新节点 属性

Get latest node with specific value of node property

我有一个架构,其中 Product 包含许多修订 ProductRevision,说明产品处于何种状态,并且它连接到特定 ProductParts 配置,每个 [=17] 都有节点=].每个 Part 可以在许多 ProductParts 中使用,每个 ProductParts 通常用于三个修订版(状态 NewTestedProduction)。如果更改了 ProductParts,则会创建状态为 New 的新修订版,并与之前的最新修订版相关联。

我还有关系 LATESTLATEST_NEWLATEST_TESTEDLATEST_PRODUCTION 等快捷方式,它们直接将 Product 与最新修订节点、最新状态 New 中的修订节点

创建简单示例的命令在这里

CREATE (p:Product {Name:"Test1"})-[:REVISION {Created:datetime()}]-> 
(pr1:ProductRevision {Status:"New", Created:datetime()})-[:USING]->(pp:ProductParts)
CREATE (pp)-[:CONTAINS]->(p1:Part {Id:1})
CREATE (pp)-[:CONTAINS]->(p2:Part {Id:2})
CREATE (pr1)-[:REVISION {Created:datetime()}]->(pr2:ProductRevision {Status:"Tested", Created:datetime()})-[:USING]->(pp)
CREATE (pr2)-[:REVISION {Created:datetime()}]->(pr3:ProductRevision {Status:"Production", Created:datetime()})-[:USING]->(pp)
CREATE (ppChanged:ProductParts)
CREATE (ppChanged)-[:USING]->(p1)
CREATE (ppChanged)-[:USING]->(p3:Part {Id:3})
CREATE (pr3)-[:REVISION {Created:datetime()}]->(pr4:ProductRevision {Status:"New", Created:datetime()})-[:USING]->(ppChanged)
CREATE (pr4)-[:REVISION {Created:datetime()}]->(pr5:ProductRevision {Status:"Tested", Created:datetime()})-[:USING]->(ppChanged)
CREATE (p)-[:LATEST {Created:datetime()}]->(pr5)
CREATE (p)-[:LATEST_NEW {Created:datetime()}]->(pr4)
CREATE (p)-[:LATEST_TESTED {Created:datetime()}]->(pr5)
CREATE (p)-[:LATEST_PRODUCTION {Created:datetime()}]->(pr3)

所以我需要像 (Product)-(ProductParts)-(Part) 这样的链,其中 ProductParts 通过特定状态的最新修订连接,例如TestedProduction.

我想使用快捷方式关系 LATEST_*,但它没有像我预期的那样工作。我试过像

这样的查询
MATCH (p:Product)-[:LATEST_TESTED|LATEST_PRODUCTION]-(pr:ProductRevision)--(pp:ProductParts)--(pa:Part)
WITH *, max(pr.Created) as prc
RETURN p,pr,prc,pp,pa

但它 return 所有 ProductParts 具有特定状态,而不仅仅是最后一个。

如果我不 return pr ProductProductParts 之间的关系缺失。

当我想要具有特定状态 TestedProduction

的最新修订版时,存在如何获得以下结果的任何方式
(:Product {Name: "Test"}) --> (:ProductRevision {Status:"Tested"}) --> (:ProductParts) --> (:Part {Id:1})
.                                                                                      \-> (:Part {Id:3})

您必须将请求分为两部分: - 首先获取你感兴趣的最新ProductRevision - 其次,获取所有 ProductParts 和与 ProductRevision

相关的部分
MATCH (p:Product)-[:LATEST_TESTED|LATEST_PRODUCTION]-(pr:ProductRevision)
WITH p, pr
ORDER BY pr.Created DESC
LIMIT 1
MATCH (pr)--(pp:ProductParts)--(pa:Part)
RETURN p, pr, pp, pa

第一个 MATCH 通过将结果降序排列并仅保留第一个结果来获得最新的 ProductRevision 第二个 MATCH 获取您需要的其余信息。