在mongoose中查询这个的最佳方法是什么?

时间:2012-07-20 04:36:23

标签: node.js mongoose

我有2个模型用户和user_verifications。用户有用户名和电子邮件,user_verification也是如此。

在向用户插入数据之前,我首先在user_verification中插入数据。 所以,我想知道用户名或电子邮件是否已注册。

我就是这样做的。

User.count({email: email}, function(err, count) {
   if (count > 0) return false;
   else User.count({username: username}, function(err, count) {
       if (count > 0) return false;
     else UserVerification.count({email: email}, function(err, count) {
        if (count > 0) return false;
        else UserVerification.count({username: username}, function(err, count) {
            if (count > 0) return false;
            return true;
        });
     });
  });
});

但这有点令人讨厌,因为我必须一遍又一遍地做同样的事情。有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

可能有用的一件事是使用$或查询,这样您就不必对同一个集合进行两次单独的查询。

User.count({ $or : [ { email : email } , { username : username } ] }, 
    function () {...} );

您可能还想使用异步库(例如async),以便您可以并行进行这些调用,因为它们不相互依赖。

async.parallel({
   user:  function(cb) { 
       User.count({$or : [ {email:email}, {username:username}]}, cb);
   },

   verification: function(cb) {
       UserVerification.count({$or : [{email:email}, {username:username}]}, cb);
   }
},
function (err, results) {
   return !(results.user > 0 || results.verification > 0)
};