先分组,再合并
合并依据:
键 totalPrice 保存 键 price 和 键 quantity 值 的乘积 的和
键averageQuantity 保存 键 quantity 的值的平均值
1.例子
{ "_id" : { "month" : 3, "day" : 15, "year" : 2014 }, "totalPrice" : 50, "averageQuantity" : 10, "count" : 1 }
{ "_id" : { "month" : 4, "day" : 4, "year" : 2014 }, "totalPrice" : 200, "averageQuantity" : 15, "count" : 2 }
{ "_id" : { "month" : 3, "day" : 1, "year" : 2014 }, "totalPrice" : 40, "averageQuantity" : 1.5, "count" : 2 }
_id 为分组依据,_id 为null,及不分组,直接合并。合并依据:
键 totalPrice 保存 键 price 和 键 quantity 值 的乘积 的和
键averageQuantity 保存 键 quantity 的值的平均值
键 count 作统计
db.sales.aggregate( [ { $group : { _id : null, totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } }, averageQuantity: { $avg: "$quantity" }, count: { $sum: 1 } } } ] )
结果 { "_id" : null, "totalPrice" : 290, "averageQuantity" : 8.6, "count" : 5 }
2.再看一例
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-03-01T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-03-15T09:00:00Z") }
{ "_id" : 4, "item" : "xyz", "price" : 5, "quantity" : 20, "date" : ISODate("2014-04-04T11:21:39.736Z") }
{ "_id" : 5, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-04-04T21:23:13.331Z") }
咱们依据 键 item 分组db.sales.aggregate( [ { $group : { _id : "$item" } } ] )
结果 { "_id" : "xyz" }
{ "_id" : "jkl" }
{ "_id" : "abc" }