Mongodb防止重复值输入

时间:2018-05-09 18:32:36

标签: javascript node.js database mongodb

我正在创建一个基本网站,用于提取用户信息并将其发布到数据库。我遇到问题的原因是,如果用户之前已注册,则会阻止用户注册。

我已尝试过createIndex(unique:true) find ensureIndex(unique:true)种方法,但没有成功。也许我搞砸了语法?我要么将Promise { <pending> }作为返回值,要么将整个文档本身与许多不相关的信息联系起来。

MY .JS FILE

var express = require('express');
var router = express.Router();
var mongo = require('mongodb').MongoClient;
var request = require('request');
var bodyParser = require('body-parser');
var url = 'mongodb://localhost/ibs';
var async = require('async');
var session = require('express-session');
var code = require('./verificationCode');


router.get('/', function (req, res, next) {



    router.post('/form', function (req, res) {

        var name = req.body.name;
        var surname = req.body.surname;
        var phone = req.body.phone;
        var email = req.body.email;
        // var address = req.body.adress;
        var verCode = code.code();
        mongo.connect(url, function (err, db) {

            person = {
                Name: req.body.name,
                Surname: surname,
                Phone: phone,
                Email: email,
                // Adress: address,
                verCode: verCode
            }


            db.collection('user').insert(person);



            res.redirect('/congratulations');
        });
    });

    res.render('information');


});

module.exports = router;

1 个答案:

答案 0 :(得分:0)

我使用的方法是一个简单的if()语句来检查是否已插入具有该名称/用户名的人

(async function addUser() {      
  let client;
       try {
           client = await MongoClient.connect(url);

           const db = client.db(dbName);
           const col = db.collection('users');
           const userFromDB = await col.findOne({ //the user you will be inserting});
           if (userFromDB) {
              // dont insert user
           } else {
              // insert user
           }
       } catch (err) {
            console.log(err)
       }
}());

如果userFromDB为true,那么如果找到了一个并且您不想插入。如果它是假的,那么你确实要插入。