すでにシャーディングされているコレクションに新しいユニークインデックスを作成できるのは、インデックスにプレフィックスとしてシャードキーが含まれている場合のみです。
このタスクについて
インデックスに一意の制約を適用すると、コレクション内のドキュメントにはインデックスフィールドの値が確実に一意になります。シャーディングされたコレクションの場合、 MongoDB は、インデックスがシャードキーであるか、プレフィックスとしてシャードキーを含む場合にのみ一意であることを強制します。
すでにシャーディングされたコレクションの場合、シャードキーがプレフィックスとして含まれていない限り、他のフィールドにユニークインデックスを作成することはできません。インデックスにプレフィックスとしてシャードキーが含まれていない場合、 コマンドを実行するとMongoDBcreateIndexes はエラーを返します。
シャードキーの一部ではないフィールドの一意性を維持する方法については、「 任意のフィールドに対する一意の制約 」を参照してください。
始める前に
コレクションのシャードキーを識別します。シャードキーを表示するには、
sh.status()メソッドを実行し、出力内のコレクションを見つけます。既存のドキュメントがフィールドの一意の制約に違反していないことを確認します。シャードに重複する 値を持つドキュメントが含まれている場合、インデックスの作成操作は、重複のないシャードでは成功するものの、重複のあるシャードでは失敗する可能性があり、シャード間でインデックスの不整合が残ります。
手順
次の例では、accounts.namesコレクションの emailフィールドにユニークインデックスを作成します。これは region_idフィールドでシャーディングされています。
シャードキーの検証
sh.status()メソッドを実行し、 の出力でaccounts.names コレクションを見つけ、シャードキーが であることを確認します。region_id
sh.status()