如何在MongoDB中查询最近5天的所有日志记录
解决方案
你存储的date字段为ISODate(即MongoDB的Date类型),直接使用Date.now()返回的数值时间戳和Date类型对比会出现类型不匹配,只需要将计算得到的5天前的时间戳转为Date类型即可:
db.getCollection('logs') .find({ "date": { "$gt": new Date(Date.now() - 5 * 24 * 60 * 60 * 1000) } }) .sort({date: -1})
可选:按自然日统计最近5天
如果需要从5天前的0点开始统计数据(排除当前时间的时分秒带来的偏移,比如今天14点查询的话,只统计5天前0点之后的所有数据,而不是往前推120小时),可以使用以下写法:
const fiveDaysAgo = new Date(); // 先将当前时间置为当天0点 fiveDaysAgo.setHours(0, 0, 0, 0); // 再减去5天的毫秒数 fiveDaysAgo.setTime(fiveDaysAgo.getTime() - 5 * 24 * 60 * 60 * 1000); db.getCollection('logs') .find({ "date": {"$gt": fiveDaysAgo} }) .sort({date: -1})
注意事项
- MongoDB中Date类型和数值类型的时间戳无法直接匹配,必须统一类型再查询
- 5天对应的毫秒数为
432000000,直接写固定值和写运算式效果一致,运算式可读性更强
内容的提问来源于stack exchange,提问作者SoftTimur
相关产品推荐
相关产品推荐

