2012-07-20 68 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