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

Mongoose 7.0.0中Model.insertMany()不支持回调的替代方案咨询

解决Mongoose 7.0.0中Model.insertMany()不支持回调的问题

Mongoose 7.0.0开始移除了insertMany()方法的回调函数支持,该方法现在仅返回Promise,因此不能再通过传入回调来处理结果或错误。以下是两种可行的替代方案:

方案1:使用Promise的.then()/.catch()语法

直接利用insertMany()返回的Promise,通过链式调用处理成功和失败情况:

// 替换原有的insertMany调用
Item.insertMany(defaultItem)
  .then(() => {
    console.log("Items added successfully");
  })
  .catch(err => {
    console.log(err);
  });

方案2:使用async/await语法(推荐)

这种写法更简洁易读,适合异步逻辑较多的场景。可以把数据库初始化和数据插入的逻辑封装到一个异步函数中:

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const date = require(__dirname + "/date.js");

const app = express();

app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));

const itemSchema = new mongoose.Schema({
     name:String
});

const Item = mongoose.model("Item", itemSchema);

const Item1= new Item({
  name:"Welcome to the todolist"
});

const Item2= new Item({
  name:"Click + button to add items"
});

const Item3= new Item({
  name:"click delete to remove item"
});

const defaultItem= [Item1, Item2, Item3 ];

// 封装异步初始化函数
async function initDatabase() {
  try {
    // 连接数据库
    await mongoose.connect("mongodb://127.0.0.1/todolistDB", {useNewUrlParser:true});
    // 插入数据
    await Item.insertMany(defaultItem);
    console.log("Items added successfully");
  } catch (err) {
    console.log(err);
  }
}

// 执行初始化
initDatabase();

另外注意你原代码中的回调写法存在语法错误:你传入的是一个包含if语句的对象,而非合法的回调函数,但即使写法正确,Mongoose 7也不再支持这种方式,因此必须改用上述基于Promise的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:45:12