既存のインデックスをユニークインデックスに変換する
非一意のインデックスを一意のインデックスに変換するには、 collMod
コマンドを使用します。 collMod
コマンドには、変換を完了する前にインデックス フィールドに一意の 値が含まれていることを確認するオプションが用意されています。
始める前に
1
手順
1
一意のインデックスに変換するインデックスを準備する
type
フィールド インデックスでcollMod
を実行し、 prepareUnique
をtrue
に設定します。
db.runCommand( { collMod: "apples", index: { keyPattern: { type: 1 }, prepareUnique: true } } )
prepareUnique
が設定されている後は、インデックス キー エントリを重複する新しいドキュメントを挿入できなくなります。 たとえば、次の挿入操作はエラーになります。
db.apples.insertOne( { type: "Delicious", quantity: 20 } )
MongoServerError: E11000 duplicate key error collection: test.apples index: type_1 dup key: { type: "Delicious" }
2
一意のキー違反のチェック
type
フィールドの一意の制約に違反するドキュメントがあるかどうかを確認するには、 unique: true
とdryRun:
true
を使用してcollMod
を実行します。
db.runCommand( { collMod: "apples", index: { keyPattern: { type: 1 }, unique: true }, dryRun: true } )
MongoServerError: Cannot convert the index to unique. Please resolve conflicting documents before running collMod again. Violations: [ { ids: [ ObjectId("660489d24cabd75abebadbd0"), ObjectId("660489d24cabd75abebadbd2") ] } ]
3
4