0

我有 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;
        });
     });
  });
});

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

谢谢。

4

1 回答 1

0

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

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)
};
于 2012-07-20T04:49:44.437 回答