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

无法从Mongoose连接获取MongoClient实例,为何client为undefined?

问题:Mongoose Connection.client 为 undefined 的原因?

根据Mongoose官方API文档,Connection的client属性应为MongoClient实例,但运行以下代码时触发错误:something bad happened in dbconnect: TypeError: Cannot read properties of undefined (reading 'db'),原因是client为undefined。

const connection = await mongoose.connect("mongodb://0.0.0.0:27017");
console.log('connected to Mongo');
  
const client = connection.client; // 预期获取MongoClient实例
  
try {
  const db = client.db("admin");
  console.log(`connected to database ${db.databaseName}`);
  const collections = await db.collections();
  collections.forEach(c => {console.log(`got collection ${c.collectionName}`)})
} catch(exception) {
  console.log(`something bad happened in dbconnect: ${exception}`); // 触发错误
} finally {
  console.log("closing database connection");
  connection.disconnect();
}

解决方案

问题出在对mongoose.connect()返回值的理解上:mongoose.connect()返回的并不是直接的Connection实例,而是一个包含connection属性的包装对象。你把整个返回对象当成了Connection,自然找不到client属性。

修正方式有两种:

方式一:使用mongoose.connection获取连接实例

await mongoose.connect("mongodb://0.0.0.0:27017");
console.log('connected to Mongo');

const connection = mongoose.connection;
const client = connection.client; // 现在能正确获取MongoClient实例

try {
  const db = client.db("admin");
  console.log(`connected to database ${db.databaseName}`);
  const collections = await db.collections();
  collections.forEach(c => {console.log(`got collection ${c.collectionName}`)})
} catch(exception) {
  console.log(`something bad happened in dbconnect: ${exception}`);
} finally {
  console.log("closing database connection");
  connection.disconnect();
}

方式二:从connect返回值中解构connection

const { connection } = await mongoose.connect("mongodb://0.0.0.0:27017");
console.log('connected to Mongo');

const client = connection.client; // 正确获取MongoClient实例

try {
  const db = client.db("admin");
  console.log(`connected to database ${db.databaseName}`);
  const collections = await db.collections();
  collections.forEach(c => {console.log(`got collection ${c.collectionName}`)})
} catch(exception) {
  console.log(`something bad happened in dbconnect: ${exception}`);
} finally {
  console.log("closing database connection");
  connection.disconnect();
}

修改后就能正确获取到MongoClient实例,调用client.db()方法也不会再触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:57:24