Azure cosmosdb 具有多个集合的DocumentDB分页
假设我有两个集合,每个集合中有10个文档。如果我想检索最多15个文档,建议使用什么方法进行分页 当我运行下面的代码时,我得到了20个结果。它开始请求返回10的第一个集合,然后第二个集合也返回10,但它应该返回5,因为MaxItemCount是15Azure cosmosdb 具有多个集合的DocumentDB分页,azure-cosmosdb,Azure Cosmosdb,假设我有两个集合,每个集合中有10个文档。如果我想检索最多15个文档,建议使用什么方法进行分页 当我运行下面的代码时,我得到了20个结果。它开始请求返回10的第一个集合,然后第二个集合也返回10,但它应该返回5,因为MaxItemCount是15 var batches = new List<IEnumerable<T>>(); var feedOptions = new FeedOptions {
var batches = new List<IEnumerable<T>>();
var feedOptions = new FeedOptions
{
MaxItemCount = 15
};
var docQuery = Client.CreateDocumentQuery<T>(Database.SelfLink, feedOptions)
.Where(predicate).AsDocumentQuery();
do
{
var batch = await docQuery.ExecuteNextAsync<T>();
batches.Add(batch);
} while (docQuery.HasMoreResults);
var docs = batches.SelectMany(b => b).Take(maxItemCount.Value);
return docs;
var batches=新列表();
var feedOptions=新的feedOptions
{
MaxItemCount=15
};
var docQuery=Client.CreateDocumentQuery(Database.SelfLink,feedOptions)
.Where(谓词).AsDocumentQuery();
做
{
var batch=await docQuery.ExecuteNextAsync();
批次。添加(批次);
}while(docQuery.HasMoreResults);
var docs=batches.SelectMany(b=>b).Take(maxItemCount.Value);
退货单据;
MaxItemCount控制每页的结果数,而不是返回的总结果数。若要减少结果总数,请将while子句更改为检查,例如,(docQuery.HasMoreResults&&batch.Length)我已使用相同的结果尝试了此操作。问题是当数据位于多个集合中时。在本例中(MaxItemCount=15)它已从第一个集合中检索到10,它应该只从另一个集合中检索到5,但它也检索到10。为此,必须在客户端管理集合迭代和分页。即,调用client.ResolveForRead()并枚举集合自链接。然后在每个集合中,调用ExecuteNextAsync()并将MaxItemCount设置为Math.Min(MaxItemCount.value-batch.Length,15)