如何使用mongoose查询具有不同回调的多个条件

时间:2018-05-08 20:39:37

标签: node.js mongodb mongoose

我正在为我的MongoDB

使用mongoose

这是我的问题: 说我想从传入的请求中保存新信息,但我想确保没有重复的信息要保存。

User.findOne({email : req.body.email},(err,email)=>{
    if(err) return res.send('there is some errors');
    else if (email) return res.send('this email has been used');
    else {
        User.findOne({username : req.body.username},(errR,username)=>{
            if(errR) return res.send('there is some errors');
            else if (username) return res.send('this username has been used');
            else {
                User.findOne({SID : req.body.SID},(ERR,SID)=>{
                    if(ERR) return res.send('there is some error') ; 
                    else if (SID) return res.send('this SID is used before') ; 
                    else{
                        //if we get here means that there was no duplicate information
                    }
                })
            }
        })
    }
 })

到目前为止,这是我的方法,但我正在寻找一种有效的方式,因为我觉得这个连锁店会因某些条目而变得混乱和复杂。

有没有更简单的方法来实现此操作?

我认为问题的标题不适合我的问题,但任何编辑建议都将受到赞赏

1 个答案:

答案 0 :(得分:0)

使用mongo $or operator

User.findOne({
   $or: [
      {email : req.body.email},
      {username: req.body.email},
      {SID : req.body.SID}
   ]
},
(err, user)=>{
   if(err) return res.send('there is some errors');
   else if (user.email === req.body.email) return res.send('this email has been used');
   else if (user.username === req.body.username) return res.send('this username has been used');
    //..
});

您还可以考虑使用unique index,但我不确定错误消息是如此具有描述性。