带有 FeedIterator 或条件语句的 Azure CosmosDb CreateTransactionalBatch
Azure CosmosDb CreateTransactionalBatch with FeedIterator or conditional statement
我们在 .net Core 项目中使用 Microsoft.Azure.Cosmos Version="3.23.0"。
我正在使用事务库进行操作。如果使用特定 属性 的文档数为 0,我想创建一个应删除项目的事务。所有文档都在同一个容器中并使用相同的分区键。
例如有 属性
人的文档
Id:
PartitionKey: ffff
Name:
LastName:
Occupation:
职业有第二个文件:
Id:
ParitionKey: ffff
Occupation:
Salary:
如果没有使用此职业的人员文档,我想删除职业文档。
我可以编写查询来获取 Occupation 具有特定值的文档的计数,然后如果计数为 0 则想要删除。想知道我是否可以使用事务库来完成所有这些操作。
我会编写查询来获取这样的计数 -
QueryDefinition queryDefinition =
new QueryDefinition("SELECT value count(1) FROM c WHERE (c.occupationId= @occupationId)")
.WithParameter("@occupationId", occupationId.ToString()));
using (FeedIterator<long> feedIterator = container.GetItemQueryIterator<long>(
queryDefinition: queryDefinition,
requestOptions: new QueryRequestOptions()
{
PartitionKey = partitionKey
}))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<long> response = await feedIterator.ReadNextAsync(cancellationToken);
long tempCount = response.Sum();
docuCount+= tempCount;
}
}
TransactionalBatch只能包含点操作(Read、Create、Replace、Delete、Patch),不能查询。
并且不能包含条件(例如,其中一个操作取决于前一个操作的结果)。
我们在 .net Core 项目中使用 Microsoft.Azure.Cosmos Version="3.23.0"。 我正在使用事务库进行操作。如果使用特定 属性 的文档数为 0,我想创建一个应删除项目的事务。所有文档都在同一个容器中并使用相同的分区键。 例如有 属性
人的文档Id:
PartitionKey: ffff
Name:
LastName:
Occupation:
职业有第二个文件:
Id:
ParitionKey: ffff
Occupation:
Salary:
如果没有使用此职业的人员文档,我想删除职业文档。 我可以编写查询来获取 Occupation 具有特定值的文档的计数,然后如果计数为 0 则想要删除。想知道我是否可以使用事务库来完成所有这些操作。
我会编写查询来获取这样的计数 -
QueryDefinition queryDefinition =
new QueryDefinition("SELECT value count(1) FROM c WHERE (c.occupationId= @occupationId)")
.WithParameter("@occupationId", occupationId.ToString()));
using (FeedIterator<long> feedIterator = container.GetItemQueryIterator<long>(
queryDefinition: queryDefinition,
requestOptions: new QueryRequestOptions()
{
PartitionKey = partitionKey
}))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<long> response = await feedIterator.ReadNextAsync(cancellationToken);
long tempCount = response.Sum();
docuCount+= tempCount;
}
}
TransactionalBatch只能包含点操作(Read、Create、Replace、Delete、Patch),不能查询。
并且不能包含条件(例如,其中一个操作取决于前一个操作的结果)。