我有一个模式,其中Product包含许多修订版ProductRevision,这些修订版说明产品处于什么状态,并且它连接到特定的ProductParts配置,每个Part都有节点。每个Part可以在许多ProductParts中使用,并且每个ProductParts通常用于三个版本(status New、Tested和Production)。如果更改了ProductParts,则会创建一个状态为New的新版本,并与以前的最后一个版本连接。
我还有一些快捷方式,如relationships 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但它返回具有特定状态的所有ProductParts,而不仅仅是最后一个。
如果我不返回pr,Product和ProductParts之间的关系就会丢失。
当我想要具有特定状态Tested或Production的最新版本时,如何获得以下结果
(:Product {Name: "Test"}) --> (:ProductRevision {Status:"Tested"}) --> (:ProductParts) --> (:Part {Id:1})
. \-> (:Part {Id:3})发布于 2019-01-29 18:31:45
您必须将请求分成两部分:-首先,获取您感兴趣的最新ProductRevision --其次,获取所有与ProductRevision相关的ProductParts和部分
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获得所需的其余信息。
https://stackoverflow.com/questions/54417559
复制相似问题