Mongodb在日期列表中搜索日期范围

时间:2015-07-16 16:49:40

标签: mongodb pymongo

在mongodb,

如果我有日期,并且我想查询日期晚于提供日期的记录,我可以这样做:

collection.find({datefield:{$gt:somedate}})

如果我想在日期范围之间找到记录,我可以用$和lt和gt进行记录。

但是说我的日期字段实际上是日期字段,日期列表。并说日期字段有以下记录

datefields = [june 1, 2015 hhmmss, june 2, 2015 hhmmss, june 14, 2015 hhmmss]
datefields = [june 1, 2015 hhmmss, june 3, 2015 hhmmss, june 8, 2016 hhmmss, june 17, 2015 hhmmss]

如何构建搜索以获取日期介于6月3日和6月7日之间的所有记录,以便我只获取第二条记录。如果范围不可能,我可以在2015年6月3日进行一次搜索而忽略hhmmss吗?

1 个答案:

答案 0 :(得分:2)

认为这将解决您的问题。使用聚合操作来展开数组,并将每个元素视为文档中的单独值。

db.collection.aggregate( [
{ $unwind : { "$datefields" } },
{ $match : { datefields : { $gt : ISODate("2015-06-02T00:00:01Z"), $lte : ISODate("2015-06-03T23:59:59Z")} } }
])

仅此一项就会给你一个"爆炸视图"您的数组结果,每个数组元素匹配一个文档。如果要将其折叠,可以添加$ group阶段。

如果这不是您要问的问题,您可以提供更多细节吗?

对于关于"无视hhmmss"的问题的后半部分,有关于此问题已经回答了许多问题。查看Query Mongodb on month, day, year... of a datetime