AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

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

インデックスの一意性制約により、コレクション内のドキュメントはインデックスされたフィールドに対して一意の値を持つことが保証されます。シャーディングされたコレクションの場合、MongoDB はインデックスがシャードキーである場合、またはシャードキーを接頭辞として含む場合にのみ一意性を強制します。

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

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

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

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

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

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