React旧应用更新报错:TypeError: db.Game.deleteMany is not a function
解决 "TypeError: db.Game.deleteMany is not a function" 错误
可能的问题根源
- Game模型未正确导出:检查
./models目录下的模型定义文件,确保Game模型是通过Mongoose的model()方法创建并正确导出的。示例模型文件写法:
同时确认const mongoose = require('mongoose'); const gameSchema = new mongoose.Schema({ // 这里填写你的游戏数据字段定义 title: String, genre: String }); module.exports = mongoose.model('Game', gameSchema);./models/index.js(模型入口文件)正确汇总导出模型:module.exports = { Game: require('./Game') }; - Mongoose版本兼容问题:升级Mongoose后,旧的模型初始化或导出逻辑可能失效。检查项目依赖的Mongoose版本,若版本跨度大,需对照官方文档调整模型写法。
- db对象未正确初始化:确认数据库连接已成功建立,且
db.Game指向的是有效的Mongoose模型实例,而非undefined或其他无效对象。可以在代码开头添加console.log(db.Game)验证。
转换为async/await的正确实现
以下是改用async/await的种子数据脚本,同时加入了基础的错误校验:
const db = require('./models'); const data = require('./gameData.json'); async function seedDatabase() { try { // 校验模型有效性 if (!db.Game || typeof db.Game.deleteMany !== 'function') { throw new Error('db.Game 不是有效的Mongoose模型,请检查模型导出逻辑'); } // 删除现有数据 const deleteResult = await db.Game.deleteMany({}); console.log(deleteResult.deletedCount, 'games deleted'); // 批量插入新数据 const seededGames = await db.Game.create(data.games); console.log(seededGames.length, 'games created successfully'); console.log('done!'); } catch (err) { console.error('种子数据导入失败:', err); } finally { process.exit(); } } seedDatabase();
额外检查步骤
- 确保在执行Seed.js前,Mongoose已经成功连接到数据库。部分旧项目可能没有在种子脚本中处理连接逻辑,需补充数据库连接代码或确保连接逻辑在脚本执行前完成。
内容的提问来源于stack exchange,提问作者cass-ette
相关产品推荐
相关产品推荐

