代码之家  ›  专栏  ›  技术社区  ›  Rudis

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

  •  0
  • Rudis  · 技术社区  · 6 年前

    我有一个模式 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})
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Muldec    6 年前

    您必须将您的请求分为两部分: -首先,获取最新信息 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 获取最新信息 产品视觉 按降序排列结果,只保留第一个结果 第二 比赛 获取所需的其他信息。