2016-07-11 17 views
1

私はコレクションを削除する代わりにremoveAllドキュメントをすべきです知っています。しかし、コレクションが落とされた後、なぜmongooseはインデックスを再作成しないのですか?Mongooseはインデックスのコレクションを再作成していません

フィールドの1つにunique:trueが設定されているスキーマがあります。 インデックスは、サーバーを起動すると作成されます。しかし、私がコレクションをドロップし、新しいレコードが来ると、コレクションが再作成され、レコードが挿入されます。ただし、一意のフィールドのインデックスは再度作成されません。

なぜそうですか?インデックスを再作成するにはどうすればよいですか?

答えて

1

ユニークとは関係ありません。 mongodbにインデックスをドロップすると、ノードを再起動する必要があります。

あなたのアプリケーションが起動すると、Mongooseはスキーマの定義済みのインデックスごとに ensureIndexを自動的に呼び出します。 Mongooseは各インデックスに対して ensureIndexを順番に呼び出し、すべてのensureIndex呼び出しが成功したとき、または にエラーがあったときに のモデルで 'index'イベントを送出します。開発にはうってつけですが、この動作は を生産中に無効にすることをお勧めします。これは、インデックスを作成するとパフォーマンスが大幅に低下する可能性があるからです( )。

Model.ensureIndexes(function (err) { 
    if (err) { 
     return res.end(err); 
    } 
}); 
:それはこのようになりますマングースで

(Mongodb > 3.0) db.collection.createIndex({}) 

(Mongodb < 3.0) db.collection.ensureIndex({}) 

それにもかかわらず、開発モードでは、あなたが(ルートまたはイベントに結び付け例示的な方法のための)方法でインデックスを再作成することができます

関連する問題