MongoDB按起止日期过滤时为何排除结束日期?
问题原因分析
你的查询结束时间设为ISODate('2023-04-18T00:00:00.000Z'),这个时间是UTC时区的4月18日零点整。而数据库中存储的4月18日数据,比如2023-04-18T11:41:45.303+00:00,时间戳明显晚于零点,不满足$lte(小于等于)的条件,因此被排除在外。
解决方案
方案一:覆盖4月18日全天数据(推荐)
将结束时间设为4月19日零点,使用$lt(小于)操作符,确保包含4月18日所有时间点的数据,同时不会误包含4月19日零点的记录:
{ createdAt: { $gte: ISODate('2023-04-10T18:30:00.000Z'), $lt: ISODate('2023-04-19T00:00:00.000Z') } }
方案二:指定4月18日的截止时刻
如果业务需要精确到4月18日的最后一刻,可以将结束时间设为当日23:59:59.999Z:
{ createdAt: { $gte: ISODate('2023-04-10T18:30:00.000Z'), $lte: ISODate('2023-04-18T23:59:59.999Z') } }
额外优化:简化查询写法
MongoDB支持在同一个字段上直接合并范围条件,无需使用$and,写法更简洁且效果一致。
内容的提问来源于stack exchange,提问作者Ben A
相关产品推荐
相关产品推荐

