Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb 具有多个集合的DocumentDB分页_Azure Cosmosdb - Fatal编程技术网

Azure cosmosdb 具有多个集合的DocumentDB分页

Azure cosmosdb 具有多个集合的DocumentDB分页,azure-cosmosdb,Azure Cosmosdb,假设我有两个集合,每个集合中有10个文档。如果我想检索最多15个文档,建议使用什么方法进行分页 当我运行下面的代码时,我得到了20个结果。它开始请求返回10的第一个集合,然后第二个集合也返回10,但它应该返回5,因为MaxItemCount是15 var batches = new List<IEnumerable<T>>(); var feedOptions = new FeedOptions {

假设我有两个集合,每个集合中有10个文档。如果我想检索最多15个文档,建议使用什么方法进行分页

当我运行下面的代码时,我得到了20个结果。它开始请求返回10的第一个集合,然后第二个集合也返回10,但它应该返回5,因为MaxItemCount是15

        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)