我想知道这是否可行。我有一个查询生成一个很好的报告,显示两个实体之间通过另外两个节点的关系。可以有多个路径。我现在想要在这两个节点之间建立直接关系,并根据其间节点中的数据计算路径数和总和。报告查询如下。
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。
感谢
答案 0 :(得分:2)
此处的问题是您尝试在无效的上下文中使用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);
此查询使用WITH将bo
,so
以及聚合函数count(sol.Number)
和sum(prop.finalPrice)
的结果传递给下一个上下文。之后,这些值用于创建bo
和so
之间的新关系。