首页 > 解决方案 > 如何使用 mongo 创建带有字段/变量/索引的集合

问题描述

我正在从头开始学习 mongo,我无法弄清楚如何使用预定义的变量创建一个集合。我需要这样做才能在我的项目上拥有独特的邮件。任何帮助将不胜感激。

我正在尝试做一个基本的CRUD,您在代码中看到的所有内容都是许多不同的教程合二为一,到目前为止,我能够创建新用户并获得所有用户的列表,但是为了删除一个或编辑/更新一个我真的需要一个独特的属性。

如果有用,这是我的代码:

    const express= require ('express');
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    const app = express();
    const cors = require('cors');
    const bcrypt = require('bcrypt');
    const MongoClient = require('mongodb').MongoClient;
    const saltRounds=10;

    app.use(cors());
    app.use(express.json());
    app.listen(3001,()=>{
        console.log("Welcome");
    });



    // CONEXION BASE DE DATOS
    MongoClient.connect('mongodb+srv://admin:admin@cluster0.bs9d2.mongodb.net/test?retryWrites=true&w=majority'
    ,{ useUnifiedTopology: true }).then(client=>{

        console.log('Bienvenido a database mongo');
        const db = client.db('ezbuy-database');
        const usersCollection = db.collection('users');

       

       
        /*Añade un usuario nuevo a la BD*/
        /*Falta ver como hacer datos unicos, pero no se como*/
         
        app.post('/newuser', (req, res) => {
            const userObject ={
            
                name: req.body.name,
                identification:req.body.identification,
                email:req.body.email,
                password:req.body.password,
                cellphone:req.body.cellphone,
                addedDate:req.body.addedDate,
                lastLoginDate:req.body.addedDate,
                role:req.body.role,
                speciality:req.body.speciality
               }
             ;
            bcrypt.hash(userObject.password,saltRounds,(err,hash) => {
                if(err){console.log(err)}
               userObject.password=hash;
               
               usersCollection.insertOne(userObject)
              .then(result => {
                console.log(result);
                console.log("Dato Añadido a mongo  ");
                res.send('Usuario Creado');
              })
              .catch(error => console.error(error))
           
            })
            })
            
            /*Devuelve todos los usuarios creados*/
            app.get('/allusers', (req, res) => {
              db.collection("users").find({}).toArray(function(err, result) {
                if (err) throw err;
                console.log(result);
                res.send(result);
              });

              app.get('/userbyid',(req,res) =>{
                db.collection("users").findOne({})
              }
              )
            
              })

          
    }).catch(console.error)

标签: javascriptnode.jsmongodbvariablesnosql

解决方案


  1. 我假设您指的是使用预定义变量创建集合的数据库模式。MongoDB 没有使用默认值预填充值的严格模式。这取决于您的应用程序来处理。 领域模式

  2. 文档插入完成后,您可以使用result.insertedId. MongoDB 集合.insertOne()

usersCollection.insertOne(newUser)
  .then(result => console.log(`Successfully inserted user with _id: ${result.insertedId}`))
  .catch(err => console.error(`Failed to insert item: ${err}`))

要通过 id 获取该用户文档,您可以_id在过滤器中使用。

usersCollection.findOne({_id: userId})

-- 所以在用户集合的情况下,正常情况下通常也有一个用户可以记住的唯一值。(电子邮件,用户名)。在这种情况下,您需要在集合上创建一个唯一索引。 MongoDB 唯一索引

usersCollection.createIndex( { "email": 1 }, { unique: true } )

唯一标志将确保不会创建具有重复电子邮件地址的用户,然后您可以像下面这样查询用户。

usersCollection.findOne({email: emailAddress})

推荐阅读