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

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

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

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

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

シャーディングされたコレクションのユニークインデックスに適用される制約と、シャードキーの一部ではないフィールドの一意性を維持する方法については、「 シャーディングされたクラスターの一意の維持 」を参照してください。

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

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

  • mongoshmongosを インスタンスに接続します。

次の例では、accounts.namesコレクションの region_id フィールドと email フィールドに一意の複合インデックスを作成し、これは region_idフィールドでシャーディングします。

1

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

sh.status()
2

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

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