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

时间:2021-04-18 04:11:12

标签: node.js reactjs mongodb mongoose mongoose-schema

我正在学习 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)

这是我的 blog.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 字符串中删除 registeresUsers 时,每个数据都会进入测试数据库。

1 个答案:

答案 0 :(得分:1)

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

mongoosedb 级别处理连接,而 Mongodb 允许单个连接具有多个数据库,但此处并非如此。

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

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