Node.js通过Mongoose连接MongoDB成功后,MongoDB Compass未显示目标数据库的问题
解决MongoDB连接成功但Compass看不到数据库的问题
嘿,我来帮你搞定这个问题!你遇到的情况其实是MongoDB的一个默认特性导致的,别担心,几步就能解决。
为什么数据库在Compass里看不到?
MongoDB有个特性:只有当你向数据库中写入数据(比如插入文档、创建集合)之后,数据库才会被实际创建并在可视化工具中显示出来。你现在的代码只是成功建立了和数据库的连接,但没有任何写入操作,所以MongoDB还没真正创建breathe_in_db,自然在Compass里看不到。
验证连接是否正确指向目标数据库
首先我们可以先确认代码确实连接到了breathe_in_db,避免连接字符串写错:
修改你的dealer-database.js,在连接成功后打印当前连接的数据库名称:
const ConnectToDb = (connectionString = DEFAULT_CONN_STRING) => { return new Promise((resolve, reject) => { mongoose.connect(connectionString, { useNewUrlParser: true, useUnifiedTopology: true }, (err) => { if (err) return reject(err) // 新增这行,打印当前连接的数据库名称 console.log("当前连接的数据库:", mongoose.connection.name); return resolve(); }) }) }
运行服务器后,终端会输出当前连接的数据库: breathe_in_db,这样就能确认连接的数据库是正确的。
插入测试数据让数据库显示出来
接下来我们通过插入一条测试数据,触发数据库的创建:
还是修改dealer-database.js,添加一个简单的模型并插入数据:
const mongoose = require('mongoose'); const DB_NAME = 'breathe_in_db'; const DEFAULT_CONN_STRING = `mongodb://localhost:27017/${ DB_NAME }` // 新增一个测试用的Schema和Model const TestSchema = new mongoose.Schema({ content: String }); const Test = mongoose.model('Test', TestSchema); // 修改ConnectToDb函数,连接后插入测试数据 const ConnectToDb = (connectionString = DEFAULT_CONN_STRING) => { return new Promise((resolve, reject) => { mongoose.connect(connectionString, { useNewUrlParser: true, useUnifiedTopology: true }, async (err) => { if (err) return reject(err) console.log("当前连接的数据库:", mongoose.connection.name); // 插入测试数据 try { await Test.create({ content: "这是一条测试数据,用来创建数据库" }); console.log("测试数据插入成功,现在去Compass刷新就能看到数据库啦!"); } catch (insertErr) { console.log("插入测试数据时出错:", insertErr); } return resolve(); }) }) } module.exports = { ConnectToDb };
运行服务器后,再打开MongoDB Compass,点击左侧的刷新按钮(或者按Ctrl+R),就能看到breathe_in_db数据库了。
额外检查:Compass的连接配置
确保你在Compass中使用的连接字符串是mongodb://localhost:27017/(没有指定具体数据库),这样才能显示所有已创建的数据库。如果Compass里指定了其他数据库,切换到默认的连接就能看到新创建的breathe_in_db了。
内容的提问来源于stack exchange,提问作者Helina Kadariya
相关产品推荐
相关产品推荐

