2017-12-04 4 views
0

最初に、挿入/更新に関連するいくつかの他の投稿があるかどうかを知っていると言います。しかし、私のケースは少し異なり、他の投稿には合わない。MongoDBとNodeJS挿入が存在しない場合その他の例外エラー

ユーザーの電子メールが存在しない場合は、新しいユーザー登録レコードを挿入しようとしています。私が今やっているのは、レコードを挿入することだけです。

一つの問題は、upsert:trueでチェック重複は本当にためにレコードがJSON Web Tokenのように挿入されようとしている時に生成されます、すべての一意の値で動作しないということである、とCreated Dateなどここに私の現在のコードです:

MongoClient.connect('mongodb://localhost:27017/norad', function(err, db){ 
if (err) return router.error(Error(err)); 
db.collection('users', function(err, coll){ 
    if (err) return router.error(Error(err)); 

    coll.insert({ 
       'email' : useremail 
       ,'pass'  : userpass 
       ,'total_req': 0 
       ,'threshold_req': 0 
       ,'threshold_start_time': 0 
       ,'ak'  : activation_key 
       ,'activated': false 
       ,'adm'  : false 
       ,'iat'  : iat 
       ,'created' : iat 
       ,'modified' : iat 
      } 
      ,function(err, writeResults){ 
       console.log(writeResults); 
       if (err && err.code == 11000) return router.error(ErrorHandler('User already exists.', 'Conflict', 409)) 
       if (err) return router.error(Error(err)); 
       var r = {'email': writeResults.ops[0].email 
         ,'Response':'Your activation code has been emailed to the address used in registration. Please check your email and follow the instructions for account activation.' 
         } 

        ,scallback = function(){ return router.submit(r) } 
        // send the activation email to the user 
        ,res = ActivationEmail(activation_key, useremail, scallback, router) 
        ; 
       if (res instanceof Error) router.error(Error(err)); 
      } 
); 

}); 
}); 

私はこのエラーを起こしていません。代わりに、これは正常に動作し、ユーザーの電子メールが既にテーブルに存在する場合でも、すべての呼び出しで新しいレコードを挿入します。

ユーザーの電子メールが既にテーブルに存在するかどうかを確認する機能を追加しようとしています。そうでない場合はエラーをスローします。そうでない場合は、新しいレコードを作成します。

+0

エラーも転記してください。 – Gnanesh

+0

'users.email'にユニークなインデックスを作成します。 –

+0

@AlexBlexこのソリューションを使用して、これがどのように見えるかを示す回答を作成できますか? – sadmicrowave

答えて

1

emailフィールドにunique indexを作成する必要があります。例えば。 in mongo shell:

db.users.createIndex(
    { email: 1}, 
    { unique: true } 
); 
+0

アレックス、あなたがお勧めしたことをしました。電子メールの重複入力時に '11000'エラーコードが正常にスローされています。これは私の問題を解決しました。ありがとうございました – sadmicrowave

関連する問題