使用Mongoose的Model.insertMany报length未定义错误,单独save正常求解决
问题解决:TypeError: Cannot read properties of undefined (reading 'length')
你的报错主要由两个问题导致,以下是分析和修正方案:
1. 数据库连接未完成就执行插入操作
mongoose.connect是异步操作,你的代码直接在连接后立即执行insertMany,此时数据库可能还未建立连接,导致模型无法正常执行批量插入,触发length读取错误。
2. 代码拼写错误
成功回调里的consloe.log是拼写错误,应为console.log,虽然这不是当前报错的直接原因,但会导致插入成功后无法正常输出提示。
修正后的代码示例(使用async/await)
const mongoose = require("mongoose"); mongoose.set('strictQuery', true); async function run() { try { // 等待数据库连接成功 await mongoose.connect("mongodb://localhost:27017/dataDB", { useNewUrlParser: true }); const dataSchema = new mongoose.Schema({ name: String }); const Data = mongoose.model("Data", dataSchema); // 直接传入普通对象数组即可,无需提前创建Model实例 const dataItems = [ { name: "Welcome to your todoList" }, { name: "Hit the + button to add a new item" }, { name: "<-- hit this to delete an item" } ]; await Data.insertMany(dataItems); console.log("Successfully saved"); } catch (err) { console.error(err); } finally { // 操作完成后关闭连接(可选) await mongoose.connection.close(); } } run();
另一种方案(监听连接事件)
const mongoose = require("mongoose"); mongoose.set('strictQuery', true); mongoose.connect("mongodb://localhost:27017/dataDB", { useNewUrlParser: true }); // 监听连接成功事件 mongoose.connection.once('open', async () => { const dataSchema = new mongoose.Schema({ name: String }); const Data = mongoose.model("Data", dataSchema); const data1 = new Data({ name: "Welcome to your todoList" }); const data2 = new Data({ name: "Hit the + button to add a new item" }); const data3 = new Data({ name: "<-- hit this to delete an item" }); const dataItems = [data1, data2, data3]; try { await Data.insertMany(dataItems); console.log("Successfully saved"); } catch (err) { console.error(err); } }); // 监听连接错误 mongoose.connection.on('error', (err) => { console.error("数据库连接失败:", err); });
内容的提问来源于stack exchange,提问作者Dragan
相关产品推荐
相关产品推荐

