Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取日期范围内给定时间范围内的Mongodb文档_Mongodb - Fatal编程技术网

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

获取日期范围内给定时间范围内的Mongodb文档,mongodb,Mongodb,我想找出在给定日期范围的特定时间段之间存在的文档 我只有一个字段“date”,它存储为日期对象 例如- 查找2018年1月10日至2018年1月30日期间上午10:00至下午23:30的所有文件 (另外,我目前使用的是3.4版)您可以添加临时字段,将日期的分钟部分表示为60*+,例如上午10点为600,然后应用过滤条件: db.col.aggregate([ { $addFields: { minutes: { $a

我想找出在给定日期范围的特定时间段之间存在的文档

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

例如-

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


(另外,我目前使用的是3.4版)

您可以添加临时字段,将日期的分钟部分表示为60*+,例如上午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 }
    }
])

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

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

model.find({
  date:{
   $gte:ISODate("2018-01-10T10:00:00.000Z"),
   $lte:ISODate("2018-01-30T23:30:00.000Z")
  }
})
其中model是集合的名称,date是集合的属性 ISO格式的文件保存日期


您可以使用以下代码执行此操作

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

这将提供1月10日至1月30日期间所有记录的数据。。。如果要求为每个日期获取时间范围在10到23之间的记录,则将为2018年1月10日到2018年1月30日的日期查找时间范围在上午10:00到下午23:30之间的所有文件。请先试试,谢谢。很好用!!