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

MongoDB插入文档时报错Topology is closed的原因及解决方法咨询

报错Topology is closed的原因
  • 核心问题是异步执行逻辑顺序错误:你的mongo()是异步函数,内部的insertMany写入操作是异步任务,调用mongo()时没有添加await,程序不会等待写入操作完成,就直接执行了后面的client.close()关闭了MongoDB连接。等写入操作真正需要访问数据库时,连接已经被销毁,就会触发该报错。
  • 额外问题:代码用了回调嵌套+async/await混用的写法,逻辑层级混乱,更容易出现异步时序问题。
修复方案

推荐全量改用async/await的写法,保证所有数据库操作执行完成后再关闭连接,修改后的完整代码如下:

const { MongoClient } = require('mongodb');
const uri = "mongodb+srv://(login info)@cluster0.56skb.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

async function runMongoOperations() {
  try {
    // 等待数据库连接建立完成
    await client.connect();
    const db = client.db("test");

    // 等待批量插入操作执行完成
    const insertRes = await db.collection('a').insertMany([
      { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A"},
      { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A"},
      { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D"},
      { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D"},
      { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A"}
    ]);
    // 可在此处处理插入结果,比如打印插入记录数
    console.log('成功插入文档数:', insertRes.insertedCount);

    // 其他数据库操作放在此处,全部执行完成后再关闭连接
    const collection = client.db("test").collection("devices");
    // 对devices集合的操作逻辑写在这里
  } catch (error) {
    // 捕获所有流程中的错误,方便排查
    console.error('操作出错:', error);
  } finally {
    // 无论操作成功/失败,最后统一关闭连接
    await client.close();
  }
}

// 执行数据库操作函数
runMongoOperations();

修改说明:

  • 移除回调写法,统一用async/await管理异步逻辑,避免时序混乱
  • 所有异步数据库操作前都添加await,保证操作完成后再执行后续逻辑
  • 增加try/catch/finally结构,统一处理错误、关闭连接,避免连接泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:03