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
相关产品推荐
相关产品推荐

