如何在 Mongoose 中设置数据库名称和集合名称?

Ari*_*ham 3 mongoose node.js mongodb-atlas

我正在构建一个连接到 MongoDB-Atlas 的小程序。我创建了一个连接、一个架构、一个模型并创建了一个文档。但不知何故,我的数据库名称是“test”,集合名称是“users”,而我没有在代码或 Atlas 中定义它,这是默认名称吗?以及如何创建/重命名数据库和集合。

编码 :

用户.js

const mongoose = require('mongoose');
const SchemaObj = mongoose.Schema;
const userSchema = new SchemaObj({
    name : {
        type:String,
        require:true

    },
    email : {
        type:String,
        require:true
    },
    password: {
        type:String,
        require:true
    }
});

mongoose.model('User',userSchema);
Run Code Online (Sandbox Code Playgroud)

应用程序.js

const express = require('express');
const app = express();
const rout = express.Router();
const PORT = 8888;
const {connectionString} = require('./Keys');
const mongoose = require('mongoose');

app.use(express.json());
app.use(require('./routes/auth'));

app.get('/',(req,res)=>{
    console.log('succesfully connected');
    res.send('im in!');
});

let server = app.listen(PORT,'0.0.0.0',()=>{
    let FuncPort = server.address().port
    let host = server.address().address
    console.log("Example app listening at http://%s:%s", host, FuncPort)
});

const client = mongoose.connect(connectionString, {
  useNewUrlParser: true,
  useUnifiedTopology: true
});
    
mongoose.connection.on('connected',()=>{
    console.log('connected to mongodb oh hell yea');
});

mongoose.connection.on('error',()=>{
    console.log('error connecting to mongodb oh hell yea');
});
Run Code Online (Sandbox Code Playgroud)

认证.js

const mongoose = require('mongoose');
const express = require('express');
const route = express.Router();
require('../moduls/User');
const user = mongoose.model("User");

rout.post('/sign',(req,res)=>{
    const {name,password,email} = req.body;
    if(name && password && email) {
        console.log('you god damn right!');
        res.json("you god damn right in response");
    } else {
        console.log('you are god damn wrong stupid idiot!');
        res.status(422);
        res.json("you are god damn wrong you stupid idiot in response");
    }

    user.findOne({email:email}).then((resolve,reject)=>{
        if(resolve)
            return res.status(422).json("user already exist yo");
        
        const newUser = new user({ name, email, password });
        newUser.save().then(() => {
            res.json('saved user!!!!');
        }).catch(err => {
            console.log("there was a problem saving the user")});
        }).catch(err => {  
            console.log(err);
        })
});
module.exports = route;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,mongooseMongoDB图书馆有什么区别?

Sou*_*rik 9

方法一

const url = "mongodb://127.0.0.1:27017/DatabaseName"

mongoose.connect(url).then(() => {
    console.log("Connected to Database");
}).catch((err) => {
    console.log("Not Connected to Database ERROR! ", err);
});
Run Code Online (Sandbox Code Playgroud)

方法2

const url = "mongodb://127.0.0.1:27017"

mongoose.connect(url,{
    dbName: 'DatabaseName',
}).then(() => {
    console.log("Connected to Database");
}).catch((err) => {
    console.log("Not Connected to Database ERROR! ", err);
});
Run Code Online (Sandbox Code Playgroud)


小智 9

这就是我更改数据库名称的方法

mongodb+srv://username:<password>@clustername.abc.mongodb.net/?retryWrites=true&w=majority
Run Code Online (Sandbox Code Playgroud)

获得 API 密钥后,您可以在查询 (?) 之前再添加 1 个路径 (/),该路径将自动成为您的数据库名称

示例:我将数据库名称添加为

我的新数据库名称

mongodb+srv://username:<password>@clustername.abc.mongodb.net/my-new-db-name?retryWrites=true&w=majority
Run Code Online (Sandbox Code Playgroud)


Wil*_*ian 7

为了命名你的 mongodb 数据库,你应该把它放在你的连接字符串中,比如:

mongoose.connect('mongodb://localhost/myDatabaseName');
Run Code Online (Sandbox Code Playgroud)

要命名您的集合或禁用复数,您可以在此处找到答案:

什么是猫鼬(Nodejs)复数规则?

var schemaObj = new mongoose.Schema(
{
 fields:Schema.Type
}, { collection: 'collection_name'});
Run Code Online (Sandbox Code Playgroud)

Mongoose是用于 MongoDB 和 Node.js 的对象数据建模 (ODM) 库。类似于 Sequelize (ORM),但用于文档 (NoSQL)。


小智 6

MONGODB_URI = mongodb+srv://名称:@next.txdcl.mongodb.net/(添加名称数据库)?retryWrites=true&w=majority

您可以添加您想要的名称( ADD NAME )并删除测试数据库和 reloa