需要有关删除具有 12 个属性的记录集的帮助
我看到的问题是当我尝试执行存储过程时,它要求 2 个输入
即使我提供分区键一些值和与提供的分区键值无关的查询,所以它不会根据我的 where 子句查询删除
select *
from c
where c.source="ABC"
如何实现我的场景?
执行后不影响任何记录
删除cosmos中部分记录:
说明:
DeleteItemsWithNewId
删除具有 newId
值的记录的方法。
函数
DeleteItemsWithNewId
创建参数化查询以在搜索结果中选择具有特定 newId 的项目。
DeleteItemsWithNewId
使用构建的查询创建 QueryDefinition
并设置参数值。
该方法运行查询并使用
queryIterator
返回结果页面。
使用
DeleteItemAsync
方法,它循环查询结果并从容器中删除每个项目。
我尝试过的代码:
static async Task Main(string[] args)
{
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey, new CosmosClientOptions() { AllowBulkExecution = true });
Microsoft.Azure.Cosmos.Database database = cosmosClient.GetDatabase(DatabaseName);
Microsoft.Azure.Cosmos.Container container = database.GetContainer(ContainerName);
await DeleteItemsWithNewId(container, 50);
}
private static async Task DeleteItemsWithNewId(Microsoft.Azure.Cosmos.Container container, int targetNewId)
{
var query = $"SELECT * FROM c WHERE c.newId = @newId";
var queryDefinition = new QueryDefinition(query).WithParameter("@newId", targetNewId);
var queryIterator = container.GetItemQueryIterator<Item>(queryDefinition);
while (queryIterator.HasMoreResults)
{
var response = await queryIterator.ReadNextAsync();
foreach (var item in response.Resource)
{
await container.DeleteItemAsync<Item>(item.id, new PartitionKey(item.pk));
}
}
}
输出:
删除前计数:
删除后计数:
对于大型集合,此方法比使用
stored procedure
更可取,因为 stored procedure
只能在集合的单个分区上运行。
使用
stored procedure
将需要多次调用,因为它只能对集合的一个分区进行操作。
这些众多的电话将根据我们收集的金额来决定。
因此,我使用上述方法来删除批量记录。