You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询集合中每天特定时间(如下午3点)创建的所有文档?

查询集合中下午3点创建的文档

要筛选createdAt字段为JavaScript Date类型、且创建时间为下午3点(即小时数为15)的文档,以MongoDB为例,可通过以下方式实现:

方法1:用聚合表达式提取小时判断

通过$expr结合$hour操作符直接提取createdAt的小时数,判断是否等于15:

db.yourCollectionName.find({
  $expr: {
    $eq: [{ $hour: "$createdAt" }, 15]
  }
})

注意时区问题

JavaScript Date对象本质存储的是UTC时间戳,$hour默认提取UTC时区的小时数。如果业务使用本地时区(比如东八区),需要在提取小时时指定时区参数:

db.yourCollectionName.find({
  $expr: {
    $eq: [{ $hour: { date: "$createdAt", timezone: "Asia/Shanghai" } }, 15]
  }
})

替换"Asia/Shanghai"为你实际使用的时区标识符即可。

方法2:预存小时字段优化大数据量查询

如果集合数据量较大,$expr可能无法利用createdAt的索引,导致查询效率偏低。建议创建文档时额外存储createdHour字段,后续查询会更高效:

  • 插入文档时:
db.yourCollectionName.insertOne({
  // 其他业务字段
  createdAt: new Date(),
  createdHour: new Date().getHours() // 需根据业务时区调整时,替换为对应时区的小时数
})
  • 查询时:
db.yourCollectionName.find({ createdHour: 15 })

内容的提问来源于stack exchange,提问作者Baron Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:05:30