在mongoose中处理重复的位置

时间:2016-10-06 11:35:22

标签: node.js mongoose duplicates hook pre

我试图找出在插入mongoose之前处理重复项的最佳位置。

const UserSchema = new Schema({
    username: String,
    email: String,
    password: String,
});

const User = mongoose.model('User', UserSchema);

UserSchema.pre('save', async function (next) {
    try {
        const doc = await User.findOne({ email: this.email }).exec();
        if (doc) {
            throw new Error('Email already used');
        }
        next();
    } catch (err) {
        next(err);
    }
});

问题在于,当我想更新用户名时,例如。

async function updateUsername(id, username) {
    try {
        const doc = await User.findOne({ _id: id }).exec();
        if (docs) {
            doc.username = username;
            await docs.save();
        } else {
            throw {
                msg: 'Does not exist'
            };
        }

    } catch (err) {
        throw err;
    }
}

这会触发预挂钩并抛出电子邮件已存在错误。 我想我在错误的地方处理这个......谢谢!

2 个答案:

答案 0 :(得分:1)

const UserSchema = new Schema({
    username: {type:String,unique:true}
    email: String,
    password: String, });

you can use unique:true while writing schema

希望这可以帮到你

答案 1 :(得分:0)

架构级validations

  const UserSchema = new Schema({
        username: String,
        email:  {type:String,unique:true},
        password: String,
    });