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

MongoDB查询报错求助:获取过去7天每日15-18点的Unix时间戳记录

解决MongoDB查询错误并实现需求

错误原因

你写的$expr里直接放了$gte和$lte两个条件,MongoDB不允许表达式对象有多个顶级操作符,必须用$and把多个条件包裹起来,这就是报错的原因。

正确查询语句

结合你的需求——筛选过去7天内、每日15:00-18:00发生的事件(DateTime是Unix时间戳),正确的查询语句如下:

db.yourCollection.find({
  $expr: {
    $and: [
      // 过滤过去7天的记录
      { $gte: ["$DateTime", { $subtract: [$$NOW, 7 * 24 * 60 * 60 * 1000] }] },
      // 过滤每日15点到18点的记录
      { $gte: [{ $hour: { $toDate: "$DateTime" } }, 15] },
      { $lte: [{ $hour: { $toDate: "$DateTime" } }, 18] }
    ]
  }
})

注意事项

  • 如果你的DateTime是秒级Unix时间戳(不是毫秒级),需要先把它转成毫秒才能用$toDate,调整后的小时提取部分是:
    { $hour: { $toDate: { $multiply: ["$DateTime", 1000] } } }
    
  • $$NOW是MongoDB的内置变量,代表当前时间,通过$subtract计算出7天前的时间戳,实现“过去7天”的筛选。

内容的提问来源于stack exchange,提问作者Abd Tita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:35:01