2017-08-02 5 views
2

私はnodejsの学生で、練習問題を作成しています。私は最近、私がmongoose.set("debug", true)を実行すると、私のコンソールでこれを見ています。ensureIndexとは何ですか?

どういう意味ですか?なぜそれは私のようなエラーを表示する - 重複キー。

Mongoose: users.ensureIndex({ username: 1 }, 
{ unique: true, background: true }) 
Mongoose: posts.ensureIndex({ username: 1 }, 
{ unique: true, background: true }) 

これを停止してエラーを修正するにはどうすればよいですか。

E11000 duplicate key error collection: cms_demo1.poosts index: username_1 dup key: 
{ : null } 

ヘルプが必要です。

答えて

0

ユーザー名にインデックスを使用していて、それが一意である必要があるようです。

書き込み操作を行うたびに、mongoはインデックスが確実に尊重されるようにします。

ここで重複キーの問題は、username値がnullの1つのドキュメントがあるように見えます。次に次回ユーザー名がnullの他のドキュメントを渡すと、ユニーク制約が無効になります。ユーザー名がnullの1つのドキュメント

一意のインデックスを使用し、複数のドキュメントのユーザー名に空白を許可したい場合は、インデックス付きの疎なオプションを使用できます。

あなたは私はあなたが、その場合には、マングースによるインデックス定義を与えている推測してい

db.users.dropIndex({username : 1}); 
db.users.ensureIndex({ username: 1 }, 
{ unique: true, background: true, sparse : true }) 

はただまばらなオプションを指定してそこに定義を更新インデックスを削除し、スパースオプションでそれを再作成することができます。

詳細はsparse

+0

実際に私は誤ってインデックスを設定しています。今すぐ削除したいのですが、どうすればいいですか?私はdropIndexを試してみますが、プログラムを実行するたびに自動的に作成されます。どのように私は永久にそれを停止します。 –

+0

dropIndexは方法です。再作成する場合は、プログラムからインデックス署名を削除していないことを意味します。あなたもコレクションをドロップすることで試すことができますが、私はそれが希望に対しての希望だと思います。 dbがどこから作り直さなければならないのかを知ることが良いでしょう。 ensureIndexは、多かれ少なかれcreateIndexのエイリアスです。ありがとう。 –

+0

ありがとう。出来た。 –

関連する問題