簡體   English   中英

MongoDB聚合查詢$ match不返回日期范圍,為什么?

[英]MongoDB Aggregation Query $match returns nothing with date range, why?

我無法獲得以下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 
});

MongoDB聚合框架的$ match不理解我提交的Moment Date對象。 $ match似乎僅適用於本地Javascript日期對象。 因此,如果您仍然想將Moment.js與$ match一起使用,只需使用Moment的toDate()方法將Moment.js日期對象轉換為本機Javascript日期對象,如下所示:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM