【问题标题】:CosmosDB Paging doesn't Return Correct Page SizeCosmosDB 分页未返回正确的页面大小
【发布时间】:2019-01-20 13:31:44
【问题描述】:

这是我在 CosmosDB 中的数据模型:

{
    "id": "100",
    "BookID": "100",
    "PublishDate": "2014-02-23",
    "Authors": [
        {
            "FirstName": "Jerry",
            "Title": "Writer"
        },
        {
            "FirstName": "Sally",
            "Title": "CEO"
        },
        {
            "FirstName": "Tom",
            "Title": "COO"
        }
    ] }

我知道我们可以在 Book 对象级别上进行分页。例如,我可以查询SELECT * FROM c 并设置页码和页面大小。

但是,我可以在子对象级别进行分页吗?在这种情况下,在Authors 级别上?

我问这个问题是因为我在Book 相关查询和Authors 相关查询中使用了完全相同的代码。 Book 查询在页码和页面大小方面具有正确的结果。但是Authors 查询总是返回数组中的所有项目。 Authors 的查询是:

SELECT c.Authors FROM c WHERE c.BookID = "100"

结果不正确,页面大小 = 1,页码 = 1。最终返回所有 3 个作者。

所以我在想也许在 Cosmosdb 中它使用 Book 作为对象,而分页仅适用于 Book 级别?这就是Authors 级别的分页不起作用的原因?

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    我认为关于分页存在一些误解:分页与返回文档相关,而不是文档的一部分。

    如果您要求数组元素,这就是您将得到的。您将获得完整的数组,而不是子集。现在,如果您有 100 个文档,每个文档都有相同的 BookID=100,那么分页将影响这 100 个文档中返回的数量。

    【讨论】:

      【解决方案2】:

      如果您想在这种情况下查询作者,您可以执行以下操作:

      SELECT c.BookID, a.FirstName, a.Title FROM c JOIN a IN c.Authors
      

      这在此处的 CosmosDB 文档中有详细说明:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-join

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 2014-07-24
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        相关资源
        最近更新 更多