首页 > 解决方案 > 使用 Mongoose 模型检查集合中是否存在文档

问题描述

我想检查“用户”集合中是否已存在电子邮件:

我有这个模型:

const isEmailExists = async (value) => {
    const res = await User.countDocuments({ email: value });
    return res > 0;
}

const User = mongoose.model('User', {
    email: {
        type: String,
        required: true,
        validate(value) {
            isEmailExists(value).then(res => {
                if (res) {
                    throw new Error('Email already exists');
                }
            })
        }
    }
});

我使用快速路由器的 post 方法:

router
    .route('/register')
    .get((req, res) => {
        res.sendFile(publicDirPath + '/auth/register.html');
    })
    .post(async (req, res) => {
        const user = new User(req.body);
        try {
            const saveUser = await user.save();
            res.send(saveUser);
        } catch (error) {
            res.send(error);
        }
    });

由于某种原因,它不起作用,并且无论如何都添加了用户..

我究竟做错了什么 ?

标签: javascriptnode.jsmongoose

解决方案


如果要检查是否存在具有特定条目/值的文档,可以执行以下操作:

function emailExists(value) {
    User.findOne({email: value}).then((err, user) => !!user)
}

推荐阅读