我无法获取以下MongoDB聚合查询以返回结果。它只返回一个空数组。我相信这是因为它没有正确处理日期范围。但是,当我执行PriceHourly.find({ date: { $lt: end, $gt: start }})
时,记录会像预期的那样返回...
var start = moment.utc('03-02-2012').startOf('day');
var end = moment.utc('03-02-2012').add('days',1).startOf('day');
PriceHourly.aggregate([
{ $match: { date: { $gt: start, $lt: end } } },
{ $group: { _id: null, avgPrice: { $avg: '$price' } } }
], function(err, results){
console.log(err, results);
});
// Model
var PriceHourlySchema = new Schema({
created: {
type: Date,
default: Date.now
},
full_date: {
type: String,
required: true,
trim: true
},
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
});
发布于 2014-03-31 20:14:13
MongoDB聚合框架的$match不理解我提交的Moment Date对象。$match似乎只适用于原生Javascript date对象。因此,如果您仍然希望在$match中使用Moment.js,只需使用Moment的toDate()
方法将Moment.js Date对象转换为Native Javascript Date对象,如下所示:
var start = moment.utc(req.query.start).startOf('year').toDate();
var end = moment.utc(req.query.start).add('years',1).startOf('year').add('hours',1).toDate();
https://stackoverflow.com/questions/22756255
复制