使用lt和gt运算符的MongoDB查询

使用lt和gt运算符的MongoDB查询,mongodb,Mongodb,有人能帮我处理这个MongoDB查询吗 我写了这个查询: db.getCollection('epg').find({ 'programs.start':{'$lte': new ISODate('2015-07-30 19:10:00.000Z')}, 'programs.end':{'$gte': new ISODate('2015-07-30 19:10:00.000Z')}}, {'programs.$':1, 'name':1, 'id':1, 'broadcastDay':1})

有人能帮我处理这个MongoDB查询吗

我写了这个查询:

db.getCollection('epg').find({
'programs.start':{'$lte': new ISODate('2015-07-30 19:10:00.000Z')},
'programs.end':{'$gte': new ISODate('2015-07-30 19:10:00.000Z')}},
{'programs.$':1, 'name':1, 'id':1, 'broadcastDay':1})
MongoDB将此文档返回给我:

{
    "_id" : ObjectId("55ba36cb68057b06d80f766a"),
    "id" : "2",
    "broadcastDay" : "2015-07-30",
    "name" : "Prima COOL",
    "programs" : [ 
        {
            "serialNumber" : "11/340/00039/0024",
            "start" : ISODate("2015-07-30T19:25:00.000Z"),
            "end" : ISODate("2015-07-30T19:44:00.000Z")
        }
    ]
}

返回文档中的开始和结束与查询不匹配。有人知道MongoDB为什么会返回此文档吗?我预计,该结果将为空(我的集合“epg”中没有匹配的文档)。

您的查询将匹配
程序中的某些项与开始条件匹配,而某些元素与结束条件匹配的任何文档。根据上面@Philipp的评论,如果要匹配
程序中的某些项同时匹配这两个条件的文档,则应使用进行查询


您正在使用来仅返回与查询匹配的数组的第一个元素。返回的元素与结束条件匹配,但如果您按ID缩回整个文档,您将看到
程序中有更多条目
,其中一个条目与开始条件匹配。

我不知道您是如何取回此文档的。但是结果应该是空的,并且在我测试它时是空的。这真的是
程序
数组的唯一条目吗?当有更多条目时,您必须使用
$elemMatch
,或者将根据任何条目中的匹配项分别测试每个标准。可能的重复项