【发布时间】:2014-05-11 13:09:06
【问题描述】:
我有以下 MongoDB 聚合查询,它查找指定月份内的所有记录,按天对记录进行 $groups,然后返回每天的平均价格。我还想返回整个月的平均价格。我可以通过使用多个 $groups 来做到这一点,如果可以,如何?
PriceHourly.aggregate([
{ $match: { date: { $gt: start, $lt: end } } },
{ $group: {
_id: "$day",
price: { $avg: '$price' },
system_demand: { $avg: '$system_demand'}
}}
], function(err, results){
results.forEach(function(r) {
r.price = Helpers.round_price(r.price);
r.system_demand = Helpers.round_price(r.system_demand);
});
console.log("Results Length: "+results.length, results);
res.jsonp(results);
}); // PriceHourly();
这是我的模型:
// Model
var PriceHourlySchema = new Schema({
created: {
type: Date,
default: Date.now
},
day: {
type: String,
required: true,
trim: true
},
hour: {
type: String,
required: true,
trim: true
},
price: {
type: Number,
required: true
},
date: {
type: Date,
required: true
}
},
{
autoIndex: true
});
【问题讨论】:
-
您无法按照您所描述的方式组合结果,除非您的意思是每个累积的“运行平均值”,否则将月平均值与每日结果相结合也没有多大意义日。否则,两组数据最适合两个查询。无论哪种情况,您的问题都可以从显示您似乎期望的数据中受益。
标签: javascript node.js mongodb mongoose aggregation-framework