2014-03-30 86 views
0

我如何重写使用聚合框架返回的平均price在提供date范围之间的下列型号此MongoDB的查询:MongoDB的聚合框架 - 如何查询的平均

型号

var PriceSchema = new Schema({ 
    price: { 
     type: Number, 
     required: true 
    }, 
    date: { 
     type: Date, 
     required: true 
    } 
}; 

查询

exports.getPriceAverage = function(req, res, next) { 
    var start  = moment.utc('03-01-2012').startOf('day'); 
    var end   = moment.utc('03-01-2012').endOf('month') 

    // Aggregation Framework Query Here... 
    Price.find({ date: { $lt: end, $gt: start }}, function(err, priceAverage) { 
     // Return average price... 
    }); 
}; 

回答

2

您提到使用聚合,但您使用的是将所有结果返回给客户端的find函数。

相反,你需要使用aggregate$avg

Price.aggregate([ 
    { $match: { date: { $lt: end, $gt: start } } }, 
    { $group: { _id: null, avgPrice: { $avg: '$price' } } } 

], function(err, results){ 
    // process the results (an array of JavaScript objects) 
});