如何在Cosmos DB for MongoDB各部署模式下可靠创建唯一索引?
Cosmos DB for MongoDB 唯一索引创建规则总结
以下是不同部署模式下,创建唯一索引的明确限制,无需试错即可判断是否允许操作:
场景一:为已有文档的集合添加唯一索引
执行命令:
db.createCollection("testCollection") db.testCollection.insertOne({someField: "value"}) db.testCollection.createIndex({someField: 1}, {unique: true})
各环境结果:
- MongoDB原生:执行成功
- Cosmos DB for MongoDB (vCore):执行成功
- Cosmos DB for MongoDB (RU模式):执行失败,报错:
Cannot create unique index when collection contains documents
场景二:为空集合添加唯一索引
执行命令:
db.createCollection("anotherCollection") db.anotherCollection.createIndex({someField: 1}, {unique: true})
各环境结果:
- MongoDB原生:执行成功
- Cosmos DB for MongoDB (vCore):执行成功
- Cosmos DB for MongoDB (RU模式,周期性备份):执行成功
- Cosmos DB for MongoDB (RU模式,连续备份/点恢复):执行失败,报错:
Error=13, Details='Response status code does not indicate success: Forbidden (403); Substatus: 0; ActivityId: ; Reason: (Message: {"Errors":["The unique index cannot be modified. To change the unique index, remove the collection and re-create a new one."]}
核心规则总结
- vCore模式 & MongoDB原生:无特殊限制,空集合或已有文档的集合均可创建唯一索引(仅需确保已有文档的字段值无重复)
- RU模式:
- 集合存在文档时,禁止创建任何唯一索引
- 集合为空时:
- 周期性备份策略:允许创建唯一索引
- 连续备份(点恢复)策略:必须在集合创建时同时定义唯一索引,后续无法添加或修改唯一索引
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

