2015-09-07 154 views
1

工作我做下面的查詢中貓鼬:查詢,在蒙戈工作不貓鼬

Schedule.find({ 
    'operative.from': { $lte: '2015-09-07T00:00:25+00:00' }, 
    'operative.to': { $gte: '2015-09-07T23:59:25+00:00' }, 
    'operative.weekdays': { $in: [ 1 ] } }) 
    .exec() 
    .then(function() { … }) 

它不返回任何結果。令我困惑的是,如果我在Mongo Shell上運行完全相同的查詢,它會按預期返回200個結果。

我試過去除條件,直到它返回了一些結果,什麼是混淆貓鼬是兩個日期查詢。

相關架構這些領域是:

operative: { 
    from: Date, 
    to: Date, 

    // weekdayds the flight is operated, Sunday = 0 
    weekdays: [] 
} 

我也保證不注日期的條件查詢返回預期的結果,和他們做。任何想法可能會導致這種情況?

+0

你有沒有嘗試_new Date()_在你的日期? –

回答

0

好這個問題是不是與查詢本身,而是使用模式,將工作

aircraft: { 
    type: String, 
    owner: String 
} 

使用保留鍵type導致驗證錯誤。出於性能原因,我在文檔中填充了跳過貓鼬驗證的集合,所以這個問題沒有被注意到。

aircraft.type路徑更改爲type: { type: String }後,文檔驗證成功,查詢正確執行。

我也報道過Mongoose存儲庫,驗證錯誤可以默默無法使您的查詢失敗,這是不可接受的。

編輯:

由於維護者向我指出的那樣,這是由貓鼬的設計。使用strict option有適當的錯誤拋出

-1

您正在將兩個字符串傳遞給您的查詢,其中mongoose需要js Date對象。

在另一個領域,查詢不相關的,我被指定如下路徑:當您使用new Date('2015-08-12T00:00:25')

+0

這是不正確的。 Mongoose期望vlid Date objet或任何可以轉換爲有效的Date對象的數據,例如Array或ISO String。 – Alberto

+0

好吧,我在生產中有幾個大型貓鼬應用程序,它們都處理日期查詢的加載,並且它們與日期查詢一起工作得很好。你試過了嗎?我只是認爲最好是進行明確的轉換,然後依靠一些隱含的代碼... – Reto

+0

這兩種方法都沒有錯。你的方式非常明確,但我依靠一個堅實的標準(ISO-8601)。兩者都可以按照預期的方式工作(這不是我的問題的根源,請參閱我自己的答案以獲取詳細信息)。另一方面,有趣的是,看看兩者之間是否存在性能差異,我想這取決於Mongoose如何處理查詢 – Alberto