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