C# 无法在Azure DocumentDB中运行分页

C# 无法在Azure DocumentDB中运行分页,c#,azure,azure-cosmosdb,nosql,C#,Azure,Azure Cosmosdb,Nosql,由于某些原因,我无法使Azure DocumentDB的分页正常工作 下面是一段代码片段 var finalResults = new List<MyResult>(); // Here I am setting max page size to be 10 var options = new FeedOptions { MaxItemCount = 10 }; var query = client.CreateDocumentQuery<MyResultItem>(co

由于某些原因,我无法使Azure DocumentDB的分页正常工作

下面是一段代码片段

var finalResults = new List<MyResult>();
// Here I am setting max page size to be 10
var options = new FeedOptions { MaxItemCount = 10 };
var query = client.CreateDocumentQuery<MyResultItem>(collection.SelfLink, options)
                  .SelectMany(r => r.Results)
                  .Where(r => r.Result > 75)
                  .Select(r => r)
                  .AsDocumentQuery();
 // it only works 1 iteration and next iteration I always get HasMoreResults = false
 // if I set MaxItemCount = 20, then I get 20 only
 while (query.HasMoreResults)
 {
     var pagedResults = query.ExecuteNextAsync<MyResult>().Result;
     foreach (var pagedResult in pagedResults)
     {
         finalResults.Add(pagedResult);
     }
 }

我试图得到一个“结果”的平面列表,其中结果>75这似乎是一个带有DocumentDB的bug;当子数组中的元素数小于请求的页面大小时,selectmany(和Join)的延续标记会出现错误

我在这个问题上发现了一条类似的线索

目前正在进行修复


同时,您可以尝试通过增加页面大小来解决此问题(例如,将其设置为最大1000)。

为了澄清,您希望得到多少结果?从这个问题来看,我想你会期待超过20份文件?介意发布一些样本数据吗?@aliuy嗨,我期待大约975个结果。我认为选择很多是有限制的。看起来您只能“分页”顶级文档,而不能“分页”对象的子对象(即,r.Results是MyResults中的子数组)。虽然,我可能不太想知道。将其设置为1000会首先破坏分页的目的。如果我有5000个项目,我可以将其设置为1000,但仍然可以得到5页吗?此外,我不受“表达式中每个值的最大数量*100”的限制,如果我将MaxItemCount设置为1000,我会得到1000,而不是100。对,您可以将页面大小设置为max(1000)作为临时解决方法;在bug修复之后,这就没有意义了。对于5000项-查询将根据文档的形状工作。例如,查询应始终适用于发送5000个文档的数据,但是对于包含2个文档(每个文档有2500个数组元素)(数组大小>页面大小)的数据集,您可能会得到不正确的结果。选择Many可展平阵列中的元素。如果在父文档上使用IN运算符,则可以预期扩展结果。可以输出LINQ查询的toString()以查看等效的SQL语法。这可能有助于了解查询行为。
{
    Id: "xxxxxxxxxxxxxxxxxxxxx",
    Name: "xxxxxxxxxxxxxxx",
    Results: [
        { Id: 1, Result: 123 },
        { Id: 2, Result: 40 },
        { Id: 3, Result: 75 }
    ]
}