2.2のMongoShardキーのドキュメントを読んでいたところ、少し混乱しました。
すべてのシャードコレクションには、シャードキーで始まるインデックスが必要です。まだドキュメントが含まれておらず、そのようなインデックスがないコレクションをシャードすると、shardCollectionはシャードキーにインデックスを作成します。コレクションにすでにドキュメントが含まれている場合は、shardCollectionを使用する前に適切なインデックスを作成する必要があります。
バージョン2.2で変更:シャードキーのインデックスは、シャードキーと同一である必要はなくなりました。このインデックスは、以前のようにシャードキー自体のインデックスにすることも、シャードキーがインデックスのプレフィックスである複合インデックスにすることもできます。このインデックスをマルチキーインデックスにすることはできません。
フィールド{zipcode:1}を使用してシャーディングされたpeopleという名前のコレクションがあり、これをフィールド{zipcode:1、username:1}のインデックスに置き換えたい場合は、次のようにします。
{zipcode:1、username:1}にインデックスを作成します:db.people.ensureIndex({zipcode:1、username:1}); MongoDBがインデックスの作成を完了したら、既存のインデックスを{zipcode:1}に安全にドロップできます。db.people.dropIndex({zipcode:1}); 警告シャードキーのインデックスをマルチキーインデックスにすることはできません。上記のように、{zipcode:1、username:1}のインデックスは、usernameフィールドに配列値がない場合にのみzipcodeのインデックスを置き換えることができます。
シャードキーの最後の適切なインデックスを削除した場合は、シャードキーだけにインデックスを再作成して回復します。
シャードキーとインデックスについていくつか質問があります。
i)ドキュメントから、2.2より前にマルチキーインデックスがサポートされていたようです。その場合、複合インデックスはマルチキーインデックスとどのように異なりますか?
ii)[a]シャードキーで始まるインデックスと[b]プレフィックスとしてシャードキーを持つインデックスの違いは何ですか?
iii)シャードキーのインデックスがマルチキーインデックスであってはならないという警告事項は何ですか?db.people.ensureIndex({zipcode:1、username:1}はマルチキーインデックスではありませんか?