我有一个模式
Product
包含许多修订
ProductRevision
也就是说,产品处于什么状态,它与特定的
ProductParts
每个节点的配置
Part
. 各
部分
可用于许多
产品零件
每一个
产品零件
通常用于三次修订(状态
New
,
Tested
和
Production
)如果
产品零件
已更改,将创建状态为的新修订
新的
与上一次修订的预防措施相关。
我还有一些捷径,比如人际关系
LATEST
,
LATEST_NEW
,
LATEST_TESTED
和
LATEST_PRODUCTION
哪些连接
产品
直接与最新修订节点,状态为最新修订节点
新的
等。
下面是创建简单示例的命令
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)
哪里
产品零件
通过特定状态下的最新版本进行连接,例如
测试
或
生产
.
我想用快捷关系
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
但它会返回所有
产品零件
具有特定的状态,而不仅仅是最后一个状态。
如果我不回来
pr
之间的关系
产品
和
产品零件
失踪。
当我需要具有特定状态的最新修订时,存在任何方法如何获得以下结果
测试
或
生产
(:Product {Name: "Test"}) --> (:ProductRevision {Status:"Tested"}) --> (:ProductParts) --> (:Part {Id:1})
. \-> (:Part {Id:3})