MongoDB执行find日期范围查询无报错返回空结果该如何解决
MongoDB日期范围查询无结果解决方法
根因分析
你存储的createdAt字段为MongoDB原生Date类型,查询时调用toISOString()将查询条件转为了字符串,类型不匹配导致没有匹配到任何数据,所以返回空结果。
正确代码实现
直接传入Date类型对象作为查询条件即可:
MongoClient.connect(url, (err, db) => { if (err) { return reject(err); } const dbo = db.db('dbname'); dbo.collection('users').find({ createdAt: { $gte: new Date(dateFrom), $lt: new Date(dateTo) } }).toArray( (err, res) => { if (err) { return reject(err); } db.close(); return resolve(res); }); });
注意事项
- 确保
dateFrom、dateTo是可被new Date()正常解析的合法格式(标准ISO字符串、时间戳等),避免生成Invalid Date导致查询异常 - 若查询范围是按本地时区的自然日统计,需要先将起止时间转换为UTC时间再传入
new Date(),避免时区偏移导致查询范围不符合预期 - 可以先在Mongo Shell中执行测试查询验证数据是否存在,示例:
db.users.find({createdAt: {$gte: ISODate("2021-03-01T00:00:00Z")}})
内容的提问来源于stack exchange,提问作者user3604526
相关产品推荐
相关产品推荐

