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

Mongoose调用populate报is not a function错误解决求助

问题分析与修复方案

报错产生原因

  • 核心原因是Mongoose版本不兼容:你使用的是Mongoose 6.0及以上版本,该版本对文档实例的populate方法做了破坏性更新:单文档实例调用populate时直接返回Promise,不再支持链式调用多个populate方法,也不再需要调用execPopulate()执行填充逻辑。你代码中的链式调用写法是Mongoose 5.x及更早版本的语法,在新版本中无法识别,因此抛出populate is not a function的类型错误。

修复方法

方法1:使用单populate传入数组配置(推荐,适配Mongoose 6+版本)

将链式调用的多个populate合并为单次调用,传入包含所有填充规则的数组,直接await即可,无需调用execPopulate:

const Registration = require('../models/Registration');

module.exports = {
  async create(request, response) {
    const { user_id } = request.headers;
    const { eventId } = request.params;
    const { date } = request.body;

    const registration = await Registration.create({
      user: user_id,
      event: eventId,
      date
    });

    // 替换原有链式populate代码
    await registration.populate([
      { path: 'event' },
      { path: 'user', select: '-password' }
    ]);

    return response.json(registration);
  }
}

方法2:使用模型静态populate方法

也可以调用Registration模型的静态populate方法,传入要填充的文档实例和填充规则:

const populatedRegistration = await Registration.populate(registration, [
  { path: 'event' },
  { path: 'user', select: '-password' }
]);
return response.json(populatedRegistration);

降级兼容方案(不推荐)

如果项目其他逻辑依赖Mongoose 5.x的语法,可以将Mongoose版本降级到5.x最后稳定版:
npm install mongoose@5.13.20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:07