如何在mongodb中创建动态数据库



我正在学习MERN堆栈开发,当我尝试通过.env文件连接数据库时,一切都很好。以下是我的数据库字符串的样子:

MYDATABASE_String="mongodb+srv://avnish:avnish@cluster0.ojaf1.mongodb.net/registeredUsers?retryWrites=true&w=majority"

当我尝试注册用户时,它工作得很好,它们在registeredUsers下。但现在,我也在实现博客部分,所以当我发布一个新博客时,它会在registeredUsers下。

现在我想知道如何动态地创建一个新数据库,以便它进入blogContent数据库,而不是registeredUsers数据库。

以下是我的server.js的样子:

const express = require('express');
const mongoose = require('mongoose')
const app = express();
const dotenv = require('dotenv')
const routesURLs = require('./routes/routes')
const registerRouter = require('./routes/register')
const loginRouter = require('./routes/login')
const blogRouter = require('./routes/blog')
const cors = require('cors')
dotenv.config()
mongoose.connect(process.env.DATABASE_ACCESS,{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex:true
},()=>console.log(
'database connected successfully'),
)
app.use(express.json())
app.use(cors())
app.use('/',routesURLs)
app.use('/register',registerRouter)
app.use('/publish',blogRouter)
app.listen(4000, () => {
console.log(`Server started on port`);
});

这是我的博客模式:

const mongoose = require('mongoose')
const blogModel = new mongoose.Schema({
title:{
type:String,
required:true,
},
category:{
type:String,
required:true,
},
slug:{
type:String,
required:true,
},
description:{
type:String,
},
content:{
type:String,
required:true
},
featuredImage:{
type:String,
},
publishedAt:{
type:Date,
default:Date.now
}
})
module.exports = mongoose.model('blog',blogModel)

这是我的博客.js

const { response, request } = require('express');
const express = require('express');
const router = require('express').Router();
const blogModel = require('../models/Blog')
router.post('/',async (req,res)=>{
const blogArticle = new blogModel({
title:req.body.title,
description:req.body.description,
category:"haha",
slug:"some-thing-here",
content:req.body.description,
})
blogArticle.save().then(data=>{
res.json({
data:data,
message:"Hurray all done"
})
}).catch(error=>{
res.json({
error:error,
message:"Lol! Nothing works"
})    
})
})

module.exports = router;

注意当我从mydatabase字符串中删除registersUsers时,每个数据都会进入Test数据库。

虽然我不同意每种类型的文档都应该获得一个完整的数据库,但我将解释如何处理这种情况。

mongoose处理db级别的连接,而Mongodb允许单个连接具有多个数据库,但这里的情况并非如此。

这意味着您必须创建另一个mongoose实例并连接到另一个数据库。这也意味着您可以对无默认连接再执行require('mongoose'),因为这将是一个不同的mongoose实例。我建议创建一个单例,根据需要为连接提供服务,以处理此问题。

我还要补充一点,mongoose对于这个用例来说非常不方便,我建议您重新考虑对另一个数据库的实际需求。

最新更新