2012-07-20 73 views
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; 
     }); 
    }); 
    }); 
}); 

但是,这是不知何故烦人,因为我不得不一遍又一遍地做同样的事情。有更好的方法吗?

谢谢。

回答

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) 
}; 
+0

谢谢。它使我的代码更具可读性。 – praxmatig 2012-07-21 06:00:37