首页 > 解决方案 > 如何检查 MongoDB 中是否已经存在选定的电子邮件和名称

问题描述

如果选定的用户电子邮件和名称已存在于 MongoDB 数据库中的某个位置,我想获取信息。我想让电子邮件和名称独一无二,因此它不能与这两个值重复。

我已经编写了工作代码,但我想知道这个解决方案是否是最佳的。

User.find({ email: email })
        .then(user => {
            if (user.length >= 1) {
                return res.status(409).json({
                    message: 'Mail exists'
                })
            } else {
                User.find({ name: name })
                    .then(user => {
                        if (user.length >= 1) {
                            return res.status(409).json({
                                message: 'Name exist'
                            })
                        } else {

                         // SOME CODE HERE

                        }
                    })
            }
        })

有没有更短的方法来写这个?谢谢 :)

标签: javascriptnode.jsmongodbmongoose

解决方案


如果您使用的是 Mongoose,您可以使用以下方法在模型中实现此目的mongoose-unique-validator

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

const userSchema = mongoose.Schema({
  email: { type: String, required: true, unique: true },
  name: { type: String, required: true, unique: true },
  password: { type: String, required: true }
});

userSchema.plugin(uniqueValidator);

module.exports = mongoose.model('User', userSchema);

这样,如果 Mongoose 检测到您尝试使用现有名称或电子邮件添加用户,它将引发错误。


推荐阅读