【问题标题】:Cannot get paging working in Azure DocumentDB无法在 Azure DocumentDB 中进行分页
【发布时间】:2015-05-11 05:43:11
【问题描述】:

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

这是一个代码sn-p

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);
     }
 }

无论我为 MaxItemCount 设置什么值,它只会得到那么多项目,不会得到下一批,所以我得到 query.HasMoreResults 在第二次迭代时总是返回 false。我找不到问题出在哪里

更新:

Json结构如下:

.NET 对象名称 MyResultItem

{
    Id: "xxxxxxxxxxxxxxxxxxxxx",
    Name: "xxxxxxxxxxxxxxx",
    Results: [
        { Id: 1, Result: 123 },
        { Id: 2, Result: 40 },
        { Id: 3, Result: 75 }
    ]
}

我正在尝试获取 Result > 75 的“结果”的平面列表

【问题讨论】:

  • 为了澄清 - 您期望有多少结果?我假设您期望的文件超过 20 个?介意发布一些示例数据吗?
  • @aliuy 嗨,我期待大约 975 个结果。我认为 SelectMany 存在限制。看起来您只能“分页”顶级文档,而不是对象的子对象(即 r.Results 是 MyResults 中的子数组)。虽然,我可能错了

标签: c# azure azure-cosmosdb nosql


【解决方案1】:

这似乎是 DocumentDB 的一个错误;当子数组中的元素数量小于请求的页面大小时,selectmany(和连接)的延续令牌行为异常。

我在MSDN forums 上发现了一个类似的主题。

目前正在修复。

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

【讨论】:

  • 很高兴知道。将它设置为 1,000 会破坏首先进行分页的目的。如果我有 5000 个项目,我可以将其设置为 1000 并仍然获得 5 个页面吗?
  • 另外,我没有得到这个限制“每个 IN 表达式的最大值数* 100”,如果我设置 MaxItemCount = 1000,我会得到 1000,而不是 100。
  • 对,您可以将页面大小设置为最大(1000)作为临时解决方法;修复错误后,这将没有意义。对于 5000 个项目 - 查询将根据文档的形状起作用。例如,查询应该始终适用于发送 5000 个文档的数据,但是对于每个包含 2500 个数组元素(数组大小 > 页面大小)的 2 个文档的数据集,您可能会得到不正确的结果。 Selectman 将数组中的元素展平。如果在父文档上使用 IN 运算符,您可以期待扩展结果。
  • 您可以输出 LINQ 查询的 toString() 以查看等效的 SQL 语法。这可能有助于阐明查询行为。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多