Mongoose日期范围查询报MongoServerError:原因及错误定位咨询
错误含义解析
这个错误表示MongoDB不允许字段路径的名称以$开头。出现这个问题是因为你在错误的位置使用了带$的查询操作符,导致MongoDB误将其识别为字段名,从而触发报错。
代码错误点
你误用了find方法的参数结构:
find的第一个参数是查询条件,用于筛选符合要求的文档;- 第二个参数是投影配置,仅用来指定返回哪些字段,不能在这里编写查询条件。
你把日期范围的查询逻辑放到了第二个参数里,MongoDB会把{ date_of_expense: { $gte: startDate, $lte: endDate } }当成投影规则处理,但投影规则里不允许出现带$的操作符,所以才会报错。
修正后的代码
const getByDateRange = async (user_id, startDate, endDate) => { const docsByDateRange = await expense.find({ user_id: user_id, date_of_expense: { $gte: startDate, $lte: endDate } }) return docsByDateRange; }
将user_id筛选条件和日期范围条件合并到find的第一个参数中,作为完整的查询条件,就能正确筛选出符合用户ID且日期在指定区间内的文档了。
内容的提问来源于stack exchange,提问作者Deepeshkumar Pakhare
相关产品推荐
相关产品推荐

