Node.js代码未写入指定Demo数据库,误写入Test数据库求助排查
问题原因与解决方案
你的代码会把数据写入Test数据库,核心问题是连接字符串未指定目标操作数据库:
- 你设置的
authSource=Demo仅代表身份验证时使用Demo数据库,但Mongoose在未明确指定操作数据库的情况下,会默认使用test数据库。
两种修复方式
方式一:修改连接字符串,直接指定目标数据库
在端口号后添加/Demo,明确指定要连接操作的数据库:
const mongoose = require('mongoose'); const main = async()=>{ // 连接字符串末尾添加/Demo await mongoose.connect("mongodb://Demo:Demo@localhost:27017/Demo?authMechanism=DEFAULT&authSource=Demo",{useNewUrlParser: true, useUnifiedTopology: true}) const ProductSchema = new mongoose.Schema({ name : String, brand: String, price : Number }); const ProductsModel = mongoose.model('demoProducts',ProductSchema) let data = new ProductsModel({name:"volvo",brand:"tata",price:18000}); let result = await data.save() console.log(result); } main()
方式二:在连接配置中添加dbName参数
无需修改连接字符串,在connect的配置选项里指定数据库名称:
const mongoose = require('mongoose'); const main = async()=>{ await mongoose.connect("mongodb://Demo:Demo@localhost:27017/?authMechanism=DEFAULT&authSource=Demo",{ useNewUrlParser: true, useUnifiedTopology: true, dbName: 'Demo' // 新增此配置项 }) const ProductSchema = new mongoose.Schema({ name : String, brand: String, price : Number }); const ProductsModel = mongoose.model('demoProducts',ProductSchema) let data = new ProductsModel({name:"volvo",brand:"tata",price:18000}); let result = await data.save() console.log(result); } main()
修复后,数据会被写入Demo数据库的demoproducts集合(Mongoose会自动将模型名称转为小写复数形式)。
内容的提问来源于stack exchange,提问作者ks_
相关产品推荐
相关产品推荐

