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

migrate-mongo执行down迁移报错:无法读取undefined的drop属性

报错诱因

触发Cannot read property 'drop' of undefined的核心原因有两个:

  • migrate-mongo 传入迁移脚本的db是MongoDB原生驱动实例,原生驱动不会把库下的集合、视图自动挂载为db对象的属性,因此你写的db.content本身就是undefined,对undefined调用drop()方法直接触发类型错误。
  • 你在up方法中调用异步方法db.createCollection时没有加await,迁移工具不会等待视图创建完成就标记迁移成功,很容易出现迁移记录和实际库结构不一致的问题。
修复方案

调整迁移脚本写法,所有异步操作前加await,统一通过db.collection(集合名)的标准API获取集合/视图实例再执行操作,修正后的代码如下:

module.exports = {
  async up(db, client) {
    // 替换为你实际的聚合管道逻辑,必须添加await等待执行完成
    await db.createCollection('content', {
      viewOn: 'assets',
      pipeline: [...stuff]
    })
  },

  async down(db, client) {
    // 通过标准API获取视图实例后执行删除
    await db.collection('content').drop()
  }
}

可选优化:如果需要避免回滚时因为视图已被手动删除导致流程中断,可以给drop方法传配置参数:await db.collection('content').drop({ strict: false }),此时即使目标视图不存在也不会抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:36:21