将现有索引转换为唯一索引
要将非唯一索引转换为唯一索引,请使用 collMod
命令。在完成转换之前,collMod
命令提供了选项以验证您的索引字段是否包含唯一值。
开始之前
步骤
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
字段唯一约束的文档,请使用 collMod
并设置 unique: true
和 dryRun: true
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") ] } ]
4