【问题标题】:Get Mongodb Documents for a given time range in a date range获取日期范围内给定时间范围的 Mongodb 文档
【发布时间】:2018-08-01 17:14:39
【问题描述】:

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

我只有一个字段“日期”,它存储为日期对象。

例如-

查找时间为 2018 年 1 月 10 日至 2018 年 1 月 30 日的上午 10:00 至下午 23:30 的所有文档

(我目前使用的是 3.4 版)

【问题讨论】:

    标签: mongodb


    【解决方案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 }
        }
    ])
    

    【讨论】:

    • 谢谢。完美运行!
    【解决方案2】:

    你可以用下面的代码做到这一点。

    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"}
            }}
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2020-10-09
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多