我将 Azure CosmosDB 与 MongoDB API 结合使用。我正在尝试执行以下操作:
db.createCollection('test')
db.test.createIndex({key: 1}, {name: 'key_1', unique: true})
但是,这样做失败并出现以下错误:
The unique index cannot be modified. To change the unique index, remove the collection and re-create a new one.
在文档和Stack Overflow中阅读相关内容时,提到您只能为空集合创建唯一索引。
但是,当我尝试以下命令时,我的集合似乎是空的,因此这显然不是它不起作用的原因:
db.test.find()
我多次尝试重新创建该集合,但无济于事。
就我而言,问题是由 CosmosDb 连续备份的限制引起的。
如文档中所述:
不支持在创建容器后创建唯一索引的用于 SQL 或 MongoDB 帐户的 Azure Cosmos DB API 进行连续备份。仅支持在初始容器创建过程中创建唯一索引的容器。对于 MongoDB 帐户,您可以使用扩展命令创建唯一索引。
我必须使用自定义命令创建我的唯一索引。
db.runCommand({
customAction: "CreateCollection",
collection: "CollectionName",
indexes: [
{
key: { "FieldName": 1 },
name: "FieldName_1",
unique: true
}
]
})
根据提到的查询格式,它似乎像通配符索引样式,不幸的是,如果这是真的,那么通配符索引在创建唯一索引方面有限制。在 Azure Cosmos DB API for MongoDB 中无法使用通配符索引。因为创建通配符索引就像执行多个特定字段。
https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/mongodb-indexing
请参考上述链接。