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

时间:2017-09-04 20:41:15

标签: neo4j cypher

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

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 个答案:

答案 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);

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