2014-03-31 197 views
0

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

你不是已經問這個問題?你刪除它了嗎?如果你確定你的日期範圍是正確的,那麼「價格」可能有問題。一個字符串可能?您沒有在此發佈示例數據,因此我們無法看到它。 –

+0

我根據我找到的最新線索改進了這個問題。我相信問題在於日期格式和$匹配。 – ac360

+1

嗯,你仍然**真的**應該顯示你的**數據**。請編輯您的問題以顯示一些內容。 –

回答

0

MongoDB的聚合框架的$比賽不明白我提交的時刻Date對象。 $匹配似乎只適用於本機JavaScript日期對象。所以,如果你仍然想使用Moment.js與$匹配,採用片刻的toDate()方法簡單地轉換Moment.js日期對象以本地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(); 
相關問題