Node.js使用Mongoose连接MongoDB时默认写入test库而非School库如何解决
问题根因
连接配置中没有显式指定要操作的目标数据库,MongoDB 驱动默认会连接test库,因此所有插入操作都写入了默认库,没有落到你预期的School库。
修复方案
以下两种方案选一种即可,推荐优先修改连接串,配置更集中。
方案1:直接修改数据库连接URL
在连接串的集群地址末尾、查询参数(以?开头的配置段)之间,加上目标数据库名School即可。
修改前的连接串:
DATABASE_URL=mongodb+srv://myusername:mypassword@cluster0.<7 letter word>.mongodb.net/?retryWrites=true&w=majority
修改后的连接串:
DATABASE_URL=mongodb+srv://myusername:mypassword@cluster0.<7 letter word>.mongodb.net/School?retryWrites=true&w=majority
注意:不要多写多余斜杠,数据库名直接放在斜杠和问号的中间位置即可。
方案2:在Mongoose连接配置中显式声明数据库名
如果不想改动连接串,也可以在mongoose.connect的第二个配置参数中添加dbName字段指定目标库。另外你代码里写的useNewURLParser存在拼写错误,正确配置项为useNewUrlParser(Url的l为小写),修正后的完整连接代码如下:
//database const mongoose = require("mongoose"); mongoose .connect(process.env.DATABASE_URL, { useNewUrlParser: true, dbName: "School" // 显式指定目标数据库为School }) .then(() => { console.log("Database connected"); }) .catch((err) => console.log(err));
验证步骤
修改完成后重启Node服务,执行一次插入操作,到MongoDB集群控制台查看School库下的对应集合,就能看到新写入的数据,不会再写入test库。
内容的提问来源于stack exchange,提问作者sabari
相关产品推荐
相关产品推荐

