如何检查数据库中是否已存在某个字段?

时间:2017-06-20 03:02:09

标签: mongodb validation mongoose

我的问题是检查数据库中是否已存在员工的姓名或电子邮件。他们说在预更新中间件中做到这一点很好。我试过了,但它没有用。

我将(id_of_staff,updatedStaff_info和callback_function)传递给更新函数。

这是我的更新功能:

module.exports.updateStaff = function(id, updatedStaff, callback){
var query = {_id: id};

    Staff.update(query, updatedStaff, callback);

}

每次调用Staff.update()时,都会执行预更新中间件。我想要的是检查名称或电子邮件是否已存在。问题是,似乎未更新预更新中间件中的名称和电子邮件。

我的预更新中间件:

staffSchema.pre("update", function(next){

 var staff = this;
 Staff.find({_id:{$ne: staff.id},  $or:[{name: staff.name}, {email: staff.email}]}, function (err, docs) {

    if (!docs.length){
        next();
    }else{                
        next(new Error("Name or email already exist"));
    }
});

});

我得到的结果总是"姓名或电子邮件已经存在"。我试图在控制台日志中打印staff.name的值,但它表示未定义。我做得对吗?你能帮我搞定吗?非常感谢你们。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我只是创建一个函数来检查名称或电子邮件是否已经存在,而不是使用预更新中间件。

以下是代码:

module.exports.updateStaff = function(id, updatedStaff, callback){
var query = {_id: id};

//check name and email if already available
function updateStaff(id, updatedStaff, callback){
    //get staff that has the same name or email
    Staff.find({_id:{$ne:id},  $or:[{name: updatedStaff.name}, {email_pc: updatedStaff.email_pc}]}).exec(
        function(err, result){
            console.log(result);
            if(!err){
                if(result.length){                                 
                    console.log("Name or email already exist.");
                    callback("Conflict", null);
                }
                else{
                    //udpate the staff
                    Staff.update(query, updatedStaff, callback);
                }
            }else{
                callback(err);
            }

        })
}

updateStaff(id, updatedStaff, callback);

}

但我仍然愿意使用预更新中间件来回答。谢谢:))