如何从 CosmosDB 中批量获取文档并进行处理?

How can I fetch documents in batches from CosmosDB and process them?

我正在尝试从 CosmosDB 中获取文档,然后对返回的文档执行 foreach 循环,我的操作如下

var productListFromHAPI = 
    await CosmosDb.GetProductDataFromHAPI(brand, deployedCountry,
         primaryLocale, secondaryLocale, _rawDataContainer, log);

var finalListOfObjects = new List<StorelensItemModel_V3>();

foreach (var storeVariantToInsert in productListFromHAPI) { processing here }

问题是 GetProductDataFromHAPI returns 数百万个文档和主机,无论我制作多大,都 运行 资源不足。

我如何拆分它以便同时获取和处理 1000 个文档?我知道我可以使用 select top 1000 等但是我怎么知道第二轮我不会再次获取相同的项目?

我也尝试过使用 offset 和 limit,但无法正常工作

分页似乎不适合这个用例。

看起来您正在使用一个包装器 GetProductDataFromHAPI,它在下面调用 Cosmos SDK。

Cosmos SDK FeedIterators 允许您分页,一次消耗一页结果:

参考:https://docs.microsoft.com/dotnet/api/microsoft.azure.cosmos.feediterator-1?view=azure-dotnet#examples

using (FeedIterator<StorelensItemModel_V3> feedIterator = this.Container.GetItemQueryIterator<StorelensItemModel_V3>(
    "query"))
{
    while (feedIterator.HasMoreResults)
    {
        FeedResponse<StorelensItemModel_V3> response = await feedIterator.ReadNextAsync();
        
        // You can yield the response for an upper layer to be consumed and pass the ContinuationToken to use the next time you want to continue the query
    }
}

附带说明一下,在构建和执行查询时请牢记性能提示:https://docs.microsoft.com/azure/cosmos-db/sql/performance-tips-query-sdk?tabs=v3&pivots=programming-language-csharp