什么是最好的方式来查询这在猫鼬?
问题描述:
我有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;
});
});
});
});
但是,这是不知何故烦人,因为我不得不一遍又一遍地做同样的事情。有更好的方法吗?
谢谢。
答
有一件事可能会帮助您使用$或查询,以便您不必为同一个集合创建两个单独的查询。
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)
};
谢谢。它使我的代码更具可读性。 – praxmatig 2012-07-21 06:00:37