自动导入数据库数据时出现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
相关产品推荐
相关产品推荐

