【发布时间】:2022-10-04 22:09:35
【问题描述】:
我有一个使用 /id 作为分区键的现有 Azure Cosmos DB。我们需要进行批量删除,但我们不能这样做,因为所有记录的分区键都不相同。有没有办法更新现有 azure cosmos DB 容器的分区键和分区键值?
【问题讨论】:
标签: azure azure-cosmosdb
我有一个使用 /id 作为分区键的现有 Azure Cosmos DB。我们需要进行批量删除,但我们不能这样做,因为所有记录的分区键都不相同。有没有办法更新现有 azure cosmos DB 容器的分区键和分区键值?
【问题讨论】:
标签: azure azure-cosmosdb
要更新文档中的任何属性,您需要id,如果您知道文档的id,那么不妨将其用于批量删除。
您可以使用Bulk Mode 中的SDK,获取ids 的列表并执行并发DeleteItemAsync 操作,因为您知道id 并且您当前的分区键是/id,那么您就知道要使用的分区键值也。
Container container = database.GetContainer(ContainerName);
List<Task> tasks = new List<Task>();
foreach (string id in itemsToDelete)
{
tasks.Add(container.DeleteItemAsync(id, new PartitionKey(id)));
}
// Wait until all are done
await Task.WhenAll(tasks);
【讨论】:
有没有办法更新分区键和分区键值 现有的 azure cosmos DB?
简单的答案 - 不。不可能更改现有容器(集合)的分区键属性。此外,无法更改容器内现有文档的分区键值。
要更改文档的分区键值,您需要使用新的分区键值创建新文档并删除现有文档。
要更改现有容器的分区键属性,您需要创建一个新容器并将数据从旧容器迁移到新容器。
【讨论】: