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

Strapi搭配MongoDB删除文件时报targetModel.updateMany is not a function错误

问题原因
  1. 核心为依赖版本冲突问题,Strapi v3.6.8仅适配MongoDB 3.x版本,你的项目中安装了MongoDB v4.1.3,版本不兼容导致数据库模型实例加载异常,targetModel对象缺失updateMany方法。
  2. 项目中同时安装了strapi-connector-bookshelf(SQL类数据库连接器)和多个mongoose相关连接器:strapi-connector-mongoose、strapi-connector-mongoose-modified、测试版strapi-hook-mongoose,多个连接器逻辑冲突,进一步加剧了模型实例的异常问题。
  3. 文件删除逻辑执行顺序早于关联关系清理逻辑,因此文件已被成功删除,但后续清理关联字段引用时调用updateMany失败,触发500错误。
解决方案
  • 优先推荐依赖修复方案:
    1. 首先卸载所有冲突依赖:
    npm uninstall strapi-connector-bookshelf strapi-connector-mongoose-modified strapi-hook-mongoose mongodb
    
    1. 安装Strapi v3.6.8适配的MongoDB版本:
    npm install mongodb@3.7.3
    
    1. 删除项目根目录下的node_modules文件夹和package-lock.json文件,重新执行npm install安装依赖,重启Strapi服务即可修复问题。
  • 临时兼容方案(若不想调整依赖版本):
    找到报错文件node_modules/strapi-connector-mongoose/lib/relations.js,在两处调用targetModel.updateMany的位置前增加方法存在性判断,修改后代码如下:
    if (reverseAssoc && reverseAssoc.nature === 'oneToManyMorph') {
      // 新增方法存在判断
      if (!targetModel.updateMany) return Promise.resolve();
      return targetModel.updateMany(
        {
          [targetModel.primaryKey]: val.ref && (val.ref._id || val.ref),
        },
        {
          [field]: null,
        },
        { session }
      );
    }
    // 新增方法存在判断
    if (!targetModel.updateMany) return Promise.resolve();
    return targetModel.updateMany(
      {
        [targetModel.primaryKey]: val.ref && (val.ref._id || val.ref),
      },
      {
        $pull: { [field]: primaryKeyValue },
      },
      { session }
    );
    
    修改完成后重启Strapi服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:01