首页 文章

使用Cypher中的查询创建与属性的关系

提问于
浏览
1

我想知道这是否可行 . 我有一个查询生成一个很好的报告,显示两个实体之间通过另外两个节点的关系 . 可以有多个路径 . 我现在想要在这两个节点之间 Build 直接关系,并根据其间节点中的数据计算路径数和总和 . 报告查询如下 .

match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg)
where sol.currStatus='Awarded'
return bo.AgencyName, count(sol.Number) as awards, so.orgName, sum(prop.finalPrice) as awardVolume;

我想做的是类似于下面的,这是行不通的 .

match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg)
where sol.currStatus='Awarded'
create (bo)-[:HAS_AWARDED{awardCount: count(sol.Number), awardVolume: sum(prop.finalPrice)}]->(so);

如果我删除关系的属性,它可以工作但是想要添加属性而不需要太多的编程 .

我正在使用最新版本的Neo4j 3.2 .

谢谢

1 回答

  • 1

    这里的问题是你试图在无效的上下文中使用 count()sum() 函数 . 以下查询应该有效:

    match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg)
    where sol.currStatus='Awarded'
    with bo, so, count(sol.Number) as count_sol, sum(prop.finalPrice) as sum_finalPrice
    create (bo)-[:HAS_AWARDED{awardCount: count_sol, awardVolume: sum_finalPrice}]->(so);
    

    此查询使用WITHboso 以及聚合函数 count(sol.Number)sum(prop.finalPrice) 的结果传递给下一个上下文 . 之后,这些值用于创建 boso 之间的新关系 .

相关问题