使用Mongoose $或运算符

时间:2016-08-08 04:21:56

标签: node.js mongodb mongoose

如何判断此方案中的用户名或电子邮件是否是在mongo数据库中找到的用户名或电子邮件。我使用$or: [ { 'username': req.body.username}, {'email': req.body.email}]来查找现有的用户名或电子邮件,但我需要知道找到了哪个用户名或电子邮件,这样我就可以向客户端发送消息,说明用户名已被删除或是收到了电子邮件。我试图记录"用户"变量但它返回了对象,如果它找到了匹配。

User.findOne({
    $or: [ { 'username': req.body.username}, {'email': req.body.email}]
}, function(err, user) {
    if (user) {
        console.log('username or password is taken');
    } else {
      userDetails.save(function(err) {
        if (err) throw err;
      });
    }
    if (err) {
        return done(err);
    }
});

2 个答案:

答案 0 :(得分:2)

如何使用pre validate个钩子来验证唯一的emailusername

User.pre('validate', true, function validateUniqueEmail( next, done) {
    next(); 
    User.findOne({email: this.email}).exec(function(err, user) {


    if(err) {
    return done(err);
    }

    if(user) {

    return done(new Error('Email is taken'));
    }

    done();

    });


});


User.pre('validate', true, function validateUniqueUsername( next, done) {
    next();
    User.findOne({username: this.username}).exec(function(err, user) {


    if(err) {
    return done(err);
    }

    if(user) {

    return done(new Error('Username is taken'));
    }

    done();

    });


});

答案 1 :(得分:0)

您只需使用找到的用户对象即可。

  User.findOne({
     $or: [ { 'username': req.body.username}, {'email': req.body.email}]  
  }, function(err, user) {
    if (user) {
       if(user.username == req.body.username){
         console.log('username is taken');
       }else{
         console.log(' email is taken');
       }
  } else {
    userDetails.save(function(err) {
      if (err) throw err;
    });
  }
  if (err) {
     return done(err);
  }
});