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

自动导入数据库数据时出现TypeError: Product.deleteMany is not a function报错求助

问题

数据库连接正常,但保留await Product.deleteMany()语句时运行报错:"TypeError: Product.deleteMany is not a function",注释掉该语句后程序可正常运行,需排查解决。

启动代码

require('dotenv').config()

const connectDB = require('./db/connect')
const Product = require('./models/product')

const jsonProducts = require('./products.json')

const start = async () => {
  try {
    await connectDB(process.env.MONGO_URI)
    await Product.deleteMany()
    await Product.create(jsonProducts)
    console.log('Success!!!!')
    process.exit(0)
  } catch (error) {
    console.log(error)
    process.exit(1)
  }
}

start()

ConnectDB代码

const mongoose = require('mongoose')

const connectDB = (url) => {
  return mongoose.connect(url, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
  })
}

module.exports = connectDB

Products模型代码

const mongoose =  require('mongoose')

const productSchema = new mongoose.Schema({
    name: {
        type: String,
        required: [true, 'products name must be provided']
    },
    price: {
        type: Number,
        required: [true, 'products price must be provided']
    },
    featured: {
        type:Boolean,
        default: false
    },
    rating: {
        type: Number,
        required: 4.5
    },
    createdAt: {
        type: Date,
        default: Date.now()
    },
    company:{
        type: String,
        enum:{
            values: ['ikea', 'liddy', 'caressa', 'marcos'],
            message: '{VALUE}  is not supported'
        } 
                // enum: ['ikea', 'liddy', 'caressa', 'marcos']
    }

})

module.exports = mongoose.model('Product',productSchema)

排查与解决办法

1. 修复模型字段错误

你的Product模型中rating字段的required属性写法错误,required应该是布尔值或包含提示信息的数组,而非直接赋值4.5。这个错误会导致模型初始化异常,进而使静态方法无法正常挂载:

rating: {
    type: Number,
    required: [true, 'products rating must be provided'], // 修正必填规则
    default: 4.5 // 如果是默认值,用default字段定义
}

2. 检查Mongoose版本

deleteMany()是Mongoose 5.x及以上版本支持的静态方法,如果你的版本过低(比如v4.x),会出现该方法不存在的报错。执行以下命令查看当前版本:

npm list mongoose

若版本低于v5.x,升级到稳定版本:

npm install mongoose@latest

3. 确认模型导出正确性

确保./models/product.js仅导出Mongoose模型,没有其他导出逻辑干扰。当前代码的导出方式是正确的,但如果存在多对象导出,可能导致导入的Product不是合法模型实例。

4. 临时兼容写法

如果暂时无法升级Mongoose,可以用remove()替代deleteMany(),实现删除所有文档的效果:

await Product.remove({}) // 空对象匹配所有文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:55:20