MongoDB按日期字符串查询数据无结果问题排查
MongoDB查询无结果问题排查
核心问题
你的查询无结果的根本原因是集合中initial和end字段存储的是字符串类型,但查询时使用Date对象进行比较,MongoDB不会自动转换类型,导致匹配逻辑失效。
从你提供的示例数据可以看到,字段值是带引号的字符串:
{ "folio": "W1013", "nombre": "CArlos", "initial": "2024-05-23T06:00:00.000Z", "end": "2024-05-24T19:52:11.050Z", "__v": 0 }
解决方案
1. 修正字段类型
先将集合中initial和end字段统一转换为Date类型,执行以下MongoDB命令(替换集合名为实际名称):
db.yourCollectionName.updateMany( {}, [ { $set: { initial: { $toDate: "$initial" }, end: { $toDate: "$end" } } } ] )
2. 简化查询语句
原查询中外层的$and是冗余的,MongoDB默认逻辑为与,直接保留$or即可,同时注意修正变量名拼写错误(intialDate → initialDate):
const initialDate = new Date('2024-05-23T06:00:00.000Z'); const endDate = new Date('2024-05-24T20:44:02.172Z'); const dispoquery = this.guestModel.find({ $or: [ { initial: { $gte: initialDate } }, { end: { $lte: endDate } } ] }) .catch(err => err) .then(doc => doc);
补充说明
MongoDB中字符串与Date对象的比较是按字典序而非时间顺序进行的,即使字符串格式符合ISO日期,也无法和Date类型的查询条件正确匹配,因此必须保证字段类型与查询条件类型一致。
内容的提问来源于stack exchange,提问作者Arturo Martinez
相关产品推荐
相关产品推荐

