获取具有特定节点值的最新节点 属性
Get latest node with specific value of node property
我有一个架构,其中 Product
包含许多修订 ProductRevision
,说明产品处于何种状态,并且它连接到特定 ProductParts
配置,每个 [=17] 都有节点=].每个 Part
可以在许多 ProductParts
中使用,每个 ProductParts
通常用于三个修订版(状态 New
、Tested
和 Production
)。如果更改了 ProductParts
,则会创建状态为 New
的新修订版,并与之前的最新修订版相关联。
我还有关系 LATEST
、LATEST_NEW
、LATEST_TESTED
和 LATEST_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
通过特定状态的最新修订连接,例如Tested
或 Production
.
我想使用快捷方式关系 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
Product
和 ProductParts
之间的关系缺失。
当我想要具有特定状态 Tested
或 Production
的最新修订版时,存在如何获得以下结果的任何方式
(: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
获取您需要的其余信息。
我有一个架构,其中 Product
包含许多修订 ProductRevision
,说明产品处于何种状态,并且它连接到特定 ProductParts
配置,每个 [=17] 都有节点=].每个 Part
可以在许多 ProductParts
中使用,每个 ProductParts
通常用于三个修订版(状态 New
、Tested
和 Production
)。如果更改了 ProductParts
,则会创建状态为 New
的新修订版,并与之前的最新修订版相关联。
我还有关系 LATEST
、LATEST_NEW
、LATEST_TESTED
和 LATEST_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
通过特定状态的最新修订连接,例如Tested
或 Production
.
我想使用快捷方式关系 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
Product
和 ProductParts
之间的关系缺失。
当我想要具有特定状态 Tested
或 Production
(: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
获取您需要的其余信息。