NestJS中MongoDB查询指定日期区间文档失败问题求助
问题分析与解决方法
你的两个查询方式都存在问题,具体错误和修正方案如下:
第一个查询的错误原因:
- 嵌套字段查询语法错误:直接写
payload: { timestamp: {...} }是要求payload对象完全匹配你传入的结构(即payload里只有timestamp且值是那个范围对象),这不是MongoDB查询嵌套字段范围的正确写法。 - 日期类型处理错误:你把
Date对象转成了ISO字符串(toISOString()),但MongoDB的日期字段如果存的是Date类型,直接传入Date对象即可,转成字符串会导致类型不匹配,触发Cast to date failed错误。
第二个查询的错误原因:
你查询的是根级的timestamp字段,但实际你的目标字段是在payload对象内部的,字段路径写错了,所以数据库找不到匹配的文档,返回空数组。
正确的查询写法:
直接使用点符号指定嵌套字段的路径,同时传入原生Date对象即可:
const data = await model.find({ "payload.timestamp": { $gte: new Date(from), $lte: new Date(to) } });
额外注意事项:
- 确认接口接收的
from和to参数是合法的日期格式,能被new Date()正确解析为有效日期 - 检查MongoDB中
payload.timestamp字段的类型确实是Date类型,如果存的是字符串,那需要把查询条件也转成对应格式的字符串(但更推荐存Date类型,便于后续日期操作)
内容的提问来源于stack exchange,提问作者Andy95
相关产品推荐
相关产品推荐

