MongoDB查询以查找在特定时间和日期范围内插入的数据

时间:2019-12-19 07:21:40

标签: mongodb mongodb-query

我需要找到昨天7AM到今天7AM插入的数据。我如何建立查询来实现这一目标。我能够获取昨天的数据,但无法添加时间过滤器。有人可以帮我吗?

db.company.find({ 
  "createdAt" : { 
    $lt: new Date(), 
    $gte: new Date(new Date().setDate(new Date().getDate()-1))
  }   
})

3 个答案:

答案 0 :(得分:1)

您可以使用moment

db.company.find({ 
  "createdAt" : { 
    $lt: moment("07:00:00", "hh:mm:ss").toDate(),
    $gte: moment("07:00:00", "hh:mm:ss").subtract(1, "days").toDate()
  }   
})

答案 1 :(得分:1)

我还将推荐Moment.js库,我的风格是:

db.company.find({ 
  "createdAt" : { 
    $lt: moment().startOf('day').add(7, "hours").toDate(),
    $gte: moment().startOf('day').add(7, "hours").subtract(1, "day").toDate()
  }   
})

您也可以在本地执行此操作,但是您必须输入更多内容:

db.company.find({
   "createdAt": {
      $lt:
         {
            $dateFromParts: {
               'year': { year: new Date() },
               'month': { month: new Date() },
               'day': { $dayOfMonth: new Date() },
               'hour': "7"
            }
         },
      $gte:
         {
            $add: [
               $dateFromParts: {
                  'year': { year: new Date() },
                  'month': { month: new Date() },
                  'day': { $dayOfMonth: new Date() },
                  'hour': "7"
               },
               -1000 * 60 * 60 * 24
            ]
         }
   }
})

答案 2 :(得分:1)

  

我需要找到昨天7AM到今天7AM插入的数据。   我该如何构建查询来实现这一目标。

我有一些类似的文件,其中两个在昨天的7AM和今天的7AM(12月19日)之内。

{ dt: ISODate("2019-12-18T12:00:00.000Z") },
{ dt: ISODate("2019-12-17T05:00:00.000Z") },
{ dt: ISODate("2019-12-19T02:00:00.000Z") },
{ dt: ISODate("2019-12-19T14:00:00.000Z") }

查询返回两个匹配的文档:

var yesterday_7am = ISODate("2019-12-18T07:00:00.000Z")
var today_7am = ISODate("2019-12-19T07:00:00.000Z")

db.test.find( { dt: { $gte: yesterday_7am, $lte: today_7am } } )



通用查询:

var this_7am =  { $dateFromParts: {
                       year: { $year: new Date() }, 
                       month: { $month: new Date() }, 
                       day: { $dayOfMonth: new Date() },
                       hour: 7
                 }
}

var last_7am = { $subtract: [ this_7am, 24*60*60*1000 ] }

db.test.find( { $expr: { $and: [ { $gte: [ "$dt", last_7am ] }, { $lte: [ "$dt", this_7am ] } ] } } )