【发布时间】:2016-04-21 10:14:21
【问题描述】:
我有 3 种类型的节点“项目”、“用户”、“公司”,它们的相关性如下:
(u : User)-[r:HAVE_DONATED{amount}]->(p : Project)
(c : Company)-[r:HAVE_DONATED{amount}]->(p : Project)
两个用户可以成为好友,可以勾选为
(u1 : User)-[:HAS_ACCOUNT]->()-[:FRIEND]-()<-[:HAS_ACCOUNT]-(u2 : User)
如果上述条件成立,那么两个用户是朋友。
现在我必须找到我的朋友捐赠的所有项目以及捐赠者和捐赠者的数量。
Match (p : Project), (u1 : User {id : {id}}) with p, u1
Optional Match (p)<-[r:HAVE_DONATED]-(u2) with a, u1, u2, r
where (u1)-[:HAS_ACCOUNT]->()-[:FRIEND]-()<-[:HAS_ACCOUNT]-(u2)
with p, count(u2) as donors, sum(toInt(r.amount)) as donations
return {id : p.id, donor : donors, donation : donations} as project
这个查询给了我正确的项目,但问题是捐赠者和捐赠不正确。在捐赠者和捐赠中,它只计算用户的贡献,而不是(用户和公司)两者的贡献。我想要用户和公司的联合捐赠。
【问题讨论】: