Mongoose nodejs - 使用数组进行分组

时间:2013-04-24 15:47:20

标签: node.js mongodb mongoose

我有一个包含以下架构的集合:

{OrderId : id, CustomerId : id, amount: Number, otherPayers : [{name : String, amount : Number}]}

我想平均计算"金额"对于customerId的所有订单,我可以通过在customerId上以平均金额进行分组来实现汇总。

现在,我想要输出"金额"字段不仅是"金额"的平均值,而且还包括"金额" " otherPayers"字段。

我已经看过mapreduce,但我无法让它工作。

有什么想法吗?在SQL中,使用子查询会非常简单。

1 个答案:

答案 0 :(得分:0)

我猜你想要将otherPayers数组中的所有金额加上文档顶层的金额字段进行平均。以下是使用聚合框架的方法:

unwind = { $unwind : "$otherPayers" };
group =  { $ group : { _id : "$CustomerId", 
                       amt : { $first : "$amount" }, 
                       count : { $sum : 1 }, 
                       total : { $sum : "$otherPayers.amount" }
         } };
project = { $project : { _id : 0, 
                         CustomerId : "$_id", 
                         avgPaid : { $divide : [ 
                                       { $add : [ "$total", "$amt" ] },  
                                       { $add : [ "$count", 1 ] } 
                         ] } 
} };

db.collection.aggregate(unwind, group, project);