2012-12-17 38 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") } 
    ] } 

您所查询的是好的,但正如其他人指出,最有可能你的数据不是结构数组。

相关问题