如何修复Mongoose排序函数?查询带排序时数据为空问题
问题解决办法
你的核心问题出在高级过滤阶段误用了原始的req.query,而非处理后的queryObj。
看这段代码:
//2) Advanced Filtering let queryStr = JSON.stringify(req.query); // 这里用了未处理的req.query,包含sort/limit等非查询字段 queryStr = queryStr.replace(/\b(gt|gte|lt|lte)\b/g, (match) => `$${match}`);
你之前已经把sort、limit这类非查询字段从queryObj中删除了,但高级过滤时却用了原始的req.query,导致这些参数被当成数据库查询条件,自然匹配不到任何数据。
修复代码
把高级过滤的第一行改成使用处理后的queryObj:
//2) Advanced Filtering let queryStr = JSON.stringify(queryObj); // 替换为处理后的queryObj queryStr = queryStr.replace(/\b(gt|gte|lt|lte)\b/g, (match) => `$${match}`);
额外验证点
- 确认MongoDB中的文档确实存在
price字段,且类型为数字(不是字符串),否则排序逻辑会异常。 - 测试排序参数:请求
?sort=price是升序,?sort=-price是降序,确保参数格式符合Mongoose的要求。
内容的提问来源于stack exchange,提问作者Alif Hakimi
相关产品推荐
相关产品推荐

