C# 无法在Azure DocumentDB中运行分页
由于某些原因,我无法使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
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 }
]
}