请问任何人可以帮助解决这个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”中没有匹配的文档)。
答案 0 :(得分:1)
您的查询将匹配programs
数组中某些项与开始条件匹配的任何文档,并且某些元素与结束条件匹配。根据上面@ Philipp的评论,如果你想匹配programs
中某些项目符合这两个条件的文档,你应该使用$elemMatch来进行查询。
您正在使用positional $ operator仅返回与查询匹配的数组的第一个元素。返回的元素与结束条件匹配,但如果您按ID撤回整个文档,您将看到programs
中有更多条目,其中一个条目与开始条件匹配。