Docs Menu
Docs Home
/ /

既存のシャーディングされたコレクションに一意のインデックスを作成する

すでにシャーディングされているコレクションに新しいユニークインデックスを作成できるのは、インデックスにプレフィックスとしてシャードキーが含まれている場合のみです。

インデックスに一意の制約を適用すると、コレクション内のドキュメントにはインデックスフィールドの値が確実に一意になります。シャーディングされたコレクションの場合、 MongoDB は、インデックスがシャードキーであるか、プレフィックスとしてシャードキーを含む場合にのみ一意であることを強制します。

すでにシャーディングされたコレクションの場合、シャードキーがプレフィックスとして含まれていない限り、他のフィールドにユニークインデックスを作成することはできません。インデックスにプレフィックスとしてシャードキーが含まれていない場合、 コマンドを実行するとMongoDBcreateIndexes はエラーを返します。

シャードキーの一部ではないフィールドの一意性を維持する方法については、「 任意のフィールドに対する一意の制約 」を参照してください。

  • コレクションのシャードキーを識別します。シャードキーを表示するには、sh.status() メソッドを実行し、出力内のコレクションを見つけます。

  • 既存のドキュメントがフィールドの一意の制約に違反していないことを確認します。シャードに重複する 値を持つドキュメントが含まれている場合、インデックスの作成操作は、重複のないシャードでは成功するものの、重複のあるシャードでは失敗する可能性があり、シャード間でインデックスの不整合が残ります。

次の例では、accounts.namesコレクションの emailフィールドにユニークインデックスを作成します。これは region_idフィールドでシャーディングされています。

1

sh.status()メソッドを実行し、 の出力でaccounts.names コレクションを見つけ、シャードキーが であることを確認します。region_id

sh.status()
2

mongoshmongosを インスタンスに接続し、ユニークインデックスを作成します。複合インデックスのプレフィックスとして、シャードキー を含めます。region_id

db.names.createIndex(
{ region_id: 1, email: 1 },
{ unique: true }
)
region_id_1_email_1

戻る

シャーディングされたコレクション

項目一覧