Mongoose使用sort排序时报Invalid sort value错误如何解决?
错误产生原因
- 语法使用错误:你调用
.sort({ sort })用了ES6对象属性简写规则,实际等价于传入了{ sort: "uniqueTimes:desc" }的对象,Mongoose会把sort当成要排序的字段名,而不是你预期的排序规则,不符合Mongoose的排序参数格式要求。 - 参数格式不匹配:Mongoose的
sort()方法合法传参只有两种格式:- 键为排序字段名、值为排序规则的对象:比如
{ uniqueTimes: 'desc' },值可以是1/-1或者asc/desc字符串 - 空格分隔的字符串:降序字段前加
-,比如'-uniqueTimes'
你直接把拼接好的uniqueTimes:desc字符串作为值传入,本身也不符合参数要求。
- 键为排序字段名、值为排序规则的对象:比如
修复步骤
- 首先拆分你从查询参数拿到的sort字符串,分离字段名和排序方向:
// 提取到的sort参数值 const sortStr = 'uniqueTimes:desc' const [sortField, sortOrder] = sortStr.split(':') // 构造合法的sort对象,无指定方向时默认升序 const sortOption = { [sortField]: sortOrder || 'asc' }
- 把构造好的sortOption直接传入
sort()方法,不要额外包一层对象:
model .find({ ...where, ...(dateQuery && { createdAt: { ...dateQuery } }), }) .sort(sortOption) // 此处直接传入构造好的对象即可 .skip(_limit * (_page - 1)) .limit(_limit) .populate(populate, populateParams) .select(select)
也可以直接拼接成字符串格式传入:
sort(sortOrder === 'desc' ?-${sortField}: sortField),效果完全一致。
内容的提问来源于stack exchange,提问作者Andon Mitev
相关产品推荐
相关产品推荐

