2016-06-21 7 views
0

私はユーザー名にプロパティ名を変更して以来、物事はSHITになっています。Mongo/mongooseスキーマがどこかにキャッシュされています

どんなに私は何をすべきか、私はエラーに

E11000重複キーエラーインデックス取得維持しない:、私はデータベースをドロップしようとした場合でも

test.users $ NAME_1 DUPキー:。:{ヌル}接続しているデータベースの名前を変更し、スキーマからunique:trueを削除すると、私はこのエラーを取得します。

私は文字通りに関係なく、私は何をすべきか削除されません。このエラーを取得することはできません、それはまだ、このエラーを投げている理由も、私はすべてのデータベースを削除し、独自のプロパティを削除した後...

ここで保存する機能があります -

router.post('/register', function(req, res){ 
    var user = new User(); 

    user.username = req.body.username; 

    //hash the password 
    bcrypt.genSalt(10, function(err, salt) { 
     bcrypt.hash(req.body.password, salt, function(err, hash) { 
      user.password = hash; 
      user.save(function(err){ 
       if(err){ 
        console.log(err.message); 
        if(err.message === "E11000 duplicate key error index: test.users.$name_1 dup key: { : \"" + user.username + "\" }"){ //this was working fine before i changed user.name to user.username 
         res.json({ 
          error: "name already taken" 
         }); 
        }else{ 
         res.json({ 
          error: "There was an error processing your registration." 
         }); 
        } 
        return(err); 
       } 
       res.json({user: user}); 
      }) 
     }); 
    }); 


}); 

答えて

2

このエラーは、すでに名前(またはユーザー名)プロパティーがnullのドキュメントを挿入しているために発生しているようです。 usernameには一意のインデックスがあるため、nullのユーザー名を持つドキュメントは1つしか作成できません。データベースから削除されませんマングーススキーマから:あなたは{真のユニーク}を削除する場合、また

E11000 duplicate key error index in mongodb mongoose

は、この質問を参照してください。あなたは実際にMongoからインデックスを削除しなければなりません。インデックスはまだそこにあります。あなたのMongooseスキーマは起動時にインデックスがあることを保証しません。 Mongooseは起動時にMongoDBでensureIndex()を実行し、フィールドがインデックスされていることを確認しますが、Mongooseから削除することは実際にMongoから削除しません。これは手動で行う必要があります。

+0

私はインデックスを削除するshouldntを使用していたdbsを削除しましたか? – joe

+0

インデックスを削除するにはどうすればよいですか?私は使用していたすべてのデータベースをクリアしましたが、まだエラーが発生しています – joe

+0

まだこれを理解していません – joe

0

これは基本的に、名前プロパティに「null」という値を持つドキュメントが2つ以上あることを示しています。たぶん、あなたはまだそのプロパティを持ついくつかのドキュメントを持っている、または名前プロパティへの参照をどこかに持っていますか?これは、文書がユニーク インデックスにインデックス付きフィールドの値を持っていない場合、インデックスはこの文書のnull値を格納するのmongoドキュメント

からです。唯一の制約である のため、MongoDBは に索引付きフィールドがない1つの文書のみを許可します。インデックス付きフィールドの値が ではない複数のドキュメントがある場合、またはインデックス付きフィールドが見つからない場合、インデックス は重複キーエラーで失敗します。

+0

しかし、iveはそれを使用しているすべてのdbsを削除しました。imは保存時にヌル値を入力しようとしていません。 – joe

+0

インデックスのようなサウンドはまだ何とかあります。mongoシェルを開き、すべてのインデックスを表示できます。それがある場合は、取り外します。 https://docs.mongodb.com/manual/tutorial/manage-indexes/ – Williz

+0

それはありません。私はそれらをすべて落とした。それでもエラーが出ます。 – joe

0

実際に問題を解決することはできませんでした。私がやったことは、自分のデータフォルダを削除して再作成することでした。

関連する問題