createIndex()
とensureIndex()
in Java MongoDBを使用)の違いは何ですか?これをグーグルで検索しましたが、満足のいく答えが得られませんでした。
pdate 2:元の回答と最初の更新では、Java API。)の代わりに誤ってMongo Shellドキュメントを参照しています。
Javaでは、 DBCollection.ensureIndex()
はバージョン2.12で非推奨になり、バージョン3.0で削除されました。 DBCollection.createIndex()
は使用すべきものです。
更新:db.collection.ensureIndex()
は、バージョン3.0.0以降廃止されました。
db.collection.createIndex() のエイリアスになりました。
オリジナル:createIndex()
は 1.8から非推奨
コレクションにインデックスを作成するために使用されましたが、ensureIndex()
は指定されたfieldにインデックスを作成します(インデックスがまだ存在しない場合)。さらに、createIndex()
を2回実行すると、2回目の実行は単にfailになりますが、ensureIndex()
では複数回呼び出すことができ、失敗しない
また、既存のドキュメントのインデックスエントリが最大インデックスキーの長さを超えている場合、mongodbの以前のバージョン(2.6より前のバージョン)でensureIndex()
の動作に関して変更されたもう1つのことインデックス作成されるしかしMongodb インデックスを作成しないそのようなドキュメントに対して、最近のバージョンではインデックスは作成されない。
Java API、DBCollection.ensureIndex()
は非推奨です、「通常の」MongoDB API(応答時)とまったく逆の方法で。 Update:この不整合は解決されたようで、db.collection.createIndex()
がMongo Shellのdb.collection.ensureIndex()
に置き換えられましたまた。
https://jira.mongodb.org/browse/Java-1097 にあるように、Java(OPが尋ねた)ensureIndex()
は、Javaドライバーのバージョン2.12.0で非推奨になりました。 DBCollection.createIndex()
は使用する必要があります。 DBCollection.ensureIndex()
(バージョン2.12へのリンク)は DBCollection Java APIではもう使用できません。
Javaドライバー(v2.12以前)にあるensureIndex
メソッドは、コレクションにインデックスが存在するかどうかをキャッシュします。複数のクライアントがインデックスを変更する可能性があるためコレクションの場合、キャッシュ値が誤っている可能性があり、ドライバーは欠落したインデックスの作成に失敗します。
このため、JavaドライバーはcreateIndex
メソッドを実装しましたが、インデックスステータスをキャッシュしないことを除き、同じ動作をします。
ドライバ2.12以降では、ensureIndex
をcreateIndex
に置き換えて、同じ動作を期待できます。ただし、以前はインデックスがすでに存在し、createIndexを送信せずに戻るパフォーマンスヒットを除きます。 mongoサーバーへのコマンド。
名前を変更せずに振る舞いを変更しなかった理由について-私にはわかりません。
バージョン> 3.0.0以降非推奨:db.collection.ensureIndex()はdb.collection.createIndex()のエイリアスになりました。