2012-12-17 36 views
3

我有結構化的這樣一個MongoDB的文檔:如何在MongoDB中查找大於或等於某個時間的記錄?

{ 
"_id": ObjectId("50cf904a07ef604c8cc3d091"), 
"lessons": { 
    "0": { 
     "lesson_name": "View and Edit Lists", 
     "release_time": ISODate("2012-12-17T00:00:00Z"), 
     "requires_anim": false, 
     "requires_qq": true 
    }, 
    "1": { 
     "lesson_name": "Leave a Tip", 
     "release_time": ISODate("2012-12-18T00:00:00Z"), 
     "requires_anim": false, 
     "requires_qq": true 
    } 
} 
} 

我有很多這樣的文件。我想要獲得所有課程發佈時間大於或等於給定時間的文檔。這裏是我寫的查詢:

db.lessons.find({"lessons.release_time":{"$gte": ISODate("2012-12-16")}}); 

但是這並沒有返回任何文件。關於我做錯了什麼以及如何改正它的任何想法。謝謝。

+5

嗯,教訓真的是一個對象?您可能想要創建一個數組,這可以解釋爲什麼該查詢不起作用,因爲您必須通過'lessons.0.release_time'手動查詢對象。 – Sammaye

+0

課程是一個數組,我通過查看rockmongo中的條目來驗證數組是正確的。所以課程真的是[{課程名稱:「查看...},{課程名稱:」離開...}]。 – Rainbard

+1

rockmongo可能會說謊,看看控制檯,看看有什麼說的。 – Sammaye

回答

8

這裏是我的測試結果:

> db.testc.insert({ lessons: [ 
    {release_time: ISODate("2012-12-17T00:00:00Z")}, 
    {release_time: ISODate("2012-12-18T00:00:00Z")} 
    ] }) 
> db.testc.find({"lessons.release_time":{"$gte": ISODate("2012-12-16")}}) 
{ "_id" : ObjectId("50cfa093ab08a4592c73f927"), 
    "lessons" : [ 
     { "release_time" : ISODate("2012-12-17T00:00:00Z") }, 
     { "release_time" : ISODate("2012-12-18T00:00:00Z") } 
    ] } 

您所查詢的是好的,但正如其他人指出,最有可能你的數據不是結構數組。

相關問題