Mongoose+Express排序异常:传入JSON字符串失效求助
Mongoose排序失效问题原因及解决方法
问题原因
Mongoose的sort()方法不支持传入JSON格式的字符串作为参数:
- 直接传入
{'price': 1}这类对象时,Mongoose能正确解析排序字段和排序方向; - 但你将对象转为JSON字符串(如
"{"price":-1}")传入后,Mongoose无法识别该格式的排序规则,导致排序失效。Mongoose支持的字符串格式排序是'price'(升序)、'-price'(降序)或'price -1'这类简洁格式,而非完整JSON字符串。
解决方案
直接传入构建好的sort对象即可,无需转为JSON字符串,修改后的代码如下:
if(req.query.sortOption){ const str = req.query.sortOption.split(':'); sort[str[0]] = str[1] === 'desc' ? -1 : 1; } console.log(sort); // 直接打印对象,无需转JSON try { const annoucements = await Annoucement.find(query) .skip(page * annoucementsPerPage) .limit(annoucementsPerPage) .populate('author') .sort(sort) // 直接传入sort对象 res.status(200).json({ status: 'Successfully got an annoucement', results: annoucements.length, data: { annoucements, }, }); } catch (error) { res.status(500).json({ status: 'Failed to get all annoucements', message: error, }); }
可选:字符串格式排序实现
如果偏好使用字符串格式传入排序规则,可以将参数转换为Mongoose支持的格式:
let sortStr = ''; if(req.query.sortOption){ const [field, direction] = req.query.sortOption.split(':'); sortStr = direction === 'desc' ? `-${field}` : field; } // 调用sort方法时传入sortStr .sort(sortStr)
内容的提问来源于stack exchange,提问作者Skooczekk
相关产品推荐
相关产品推荐

