我怎样才能按月分组并计算平均数量,在猫鼬中,只有字段时间戳?
{
"timestamp": 1234567890,
"qty": 3
},
{
"timestamp": 09876543322,
"qty": 5
}
我想知道每个月的平均数量。
如果您的“时间戳”字段是日期类型的值,那么您可以使用
聚合框架$month
中的投影运算符从时间戳中获取月份,然后:group
collection.aggregate([
// Grab the month of the timestamp
{$project: {"qty":1, "month":{$month: "$timestamp"}}},
// Find average for each month
{$group: {"_id":"$month", "avg_qty":{$avg:"$qty"}}}
])
如果时间戳只是一个数字,您可以使用 map-reduce。与此类似的东西:
var o = {};
// Get the month and qty for each document, grouping into months
o.map = function() { emit( (new Date(this.timestamp)).getMonth(), this.qty); };
// Get the average qty for each month
o.reduce = function(month, quants) { return Array.sum(quants)/quants.length; };
collection.mapReduce(o, function(err, results) {
console.log(results);
});