2017-07-21 17 views
0

新しいユーザーと電子メールを登録しようとするとmongoose約束を使ってエラーをキャッチしています。ここでは、コードされています、ここで関数を呼び出すためのコードはMongoose save()関数の重複キーのエラーオブジェクト

user.service.js

function create(userParams) { 
    var user  = new User(userParams); 
    return user.save(); 
} 

と私のAPIルータである:

user.controller.js

function register(req, res) { 
    var user = { 
     uname : req.body.uname, 
     email : req.body.email, 
     password : req.body.password 
    } 
    userService.create(user) 
     .then(function(){ 
      res.status(200).json({ success: true, message: 'User Created!' }); 
     }) 
     .catch(function(err){ 
      res.status(400).send(err); 
     }) 
} 

mongoDBに保存されている関数とデータを実行すると正しく動作します。私が知りたいのは、una​​meとemailの両方にuniqueというプロパティを追加しているので、どちらか一方に重複した値を作成しようとすると、エラーが発生します。これは私が重複値を作成しようとしました「catched」されたボディエラー

{ 
    "code":11000, 
    "index":0, 
    "errmsg":"E11000 duplicate key error collection: flash-card.users index: name_1 dup key: { : null }", 
    "op":{/*Contain all info that want to be registered*/} 
} 

ですが、それは、重複する値を持つプロパティを示すことなく、上記と同じエラーを示しました。エラー/重複値を持つプロパティを指定する他のアイデア/アプローチ

+0

名前がnullになっているようです。それは既にDBに存在します。それはなぜ起こっているのですか –

答えて

1

手がかりがあります

collection: flash-card.users 
index: name_1 
dup key: { : null } 

スキーマが一度ユニークマークされていた(インデックス名から推測)nameと呼ばれる性質を持っているように見えます。

私はいくつかの点で、あなたは(おそらくunameに)そのプロパティの名前を変更していることと思いますが、あなたはそれを行うときnameに一意索引がを自動的に削除されません。

代わりに、すべての新しい文書のために、MongoDBは(この動作は「これとは対照的に...」で始まる、here文書化されて)あなたの文書が値nullname性質を持っていると仮定して、最初の文書一度ますそれ以降の文書ではE11000エラーが発生します。

この問題を解決するには、name_1インデックス(MongoシェルやRoboMongo/Robo 3Tなど)を削除する必要があります。

+0

手がかりありがとう! unameのインデックスを削除して、正しい重複キーを表示します。 – malxatra

関連する問題