0

2 つのモデル ユーザーと user_verifications があります。user にはユーザー名と電子メールがあり、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 クエリを使用すると、同じコレクションに対して 2 つの個別のクエリを作成する必要がなくなります。

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 に答える