You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose中.sort()排序时报错:比较函数参数不符合要求

问题解决:Mongoose .sort() 报错 "The comparison function must be either a function or undefined"

你的代码存在两个关键问题导致了该报错:

  • 提前执行查询破坏链式调用:第一行的await Tour.find(queryStr)会直接执行数据库查询并返回文档数组,而非Mongoose的Query对象。数组的sort()方法要求传入比较函数,你传入字符串自然触发错误。
  • 变量名拼写错误:你定义了排序规则变量sortBy,但调用sort()时误用了未定义的sort变量(该错误被第一个问题覆盖)。

修复后的代码:

// 不要提前await,保留Query对象用于链式调用
let query = Tour.find(queryStr);

if (req.query.sort) {
    const sortBy = req.query.sort.split(',').join(' ');
    // 使用正确的变量名sortBy传入排序规则
    query = query.sort(sortBy);
}

// 最后执行查询并获取结果
const tours = await query;

关键说明

Mongoose查询采用链式构建模式:只有调用await或exec()时才会真正执行数据库请求。因此需要先保留Query对象,依次添加sort()等查询修饰条件,最后再执行查询。

另外,split(',').join(' ')的作用是将请求参数中逗号分隔的多字段排序规则(比如price,-rating)转换为Mongoose支持的空格分隔格式,实现多字段排序(负号表示降序)。

内容的提问来源于stack exchange,提问作者Michael_O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:55:24