获取日期范围内给定时间范围的Mongodb文档

时间:2018-08-01 05:54:08

标签: mongodb

我想找出在给定日期范围内某个时间段之间存在的文档。

我只有一个字段“ date”存储为Date对象。

例如-

查找时间在2018年1月10日至2018年1月30日之间的所有文件,时间为上午10:00至晚上23:30。

(我目前也正在使用3.4版)

3 个答案:

答案 0 :(得分:1)

您可以添加一个临时字段,该字段将日期的分钟部分表示为60 * {$hour + $minute,因此上午10点将是600,然后应用过滤条件:

db.col.aggregate([
    {
        $addFields: {
            minutes: {
                $add: [ { $minute: "$date" }, { $multiply: [ { $hour: "$date" }, 60 ] }]
            }
        }
    },
    {
        $match: {
            $and: [
                { "date": { $gte: ISODate("2018-01-10T10:00:00.000Z") } },
                { "date" : { $lte: ISODate("2018-01-30T23:30:00.000Z") } },
                { "minutes": { $gte: 60*10 } },
                { "minutes": { $lte: 23*60+30 } }
            ]
        }
    },
    {
        $project: { minutes: 0 }
    }
])

答案 1 :(得分:0)

您可以使用以下代码进行操作。

db.getCollection('collection name').aggregate([
    {$project: {
        "yearMonthDayUTC": { $dateToString: { format: "%Y-%m-%d", date: "$date" }},
        "timewithOffset": { $dateToString: { format: "%H:%M:%S", date: "$date", timezone: "Your time zone" }}
        }
    },
    {$match: {
            "yearMonthDayUTC": {$gte: "2018-01-10", $lt: "2018-01-30"},
            "timewithOffset": {$gte: "10:00:00", $lt: "23:30:00"}
        }}
])

答案 2 :(得分:-1)

首先,您必须确保您的数据库以ISO格式(mongo支持的格式)存储日期

您可以使用以下命令查找文档:-

model.find({
  date:{
   $gte:ISODate("2018-01-10T10:00:00.000Z"),
   $lte:ISODate("2018-01-30T23:30:00.000Z")
  }
})
  

其中model是集合的名称,date是的属性   ISO格式的文档保存日期。