CosmosDB分页未返回正确的页面大小

时间:2018-08-13 18:48:41

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

这是我来自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的查询是:

  

从c的c.BookID =“ 100”中选择c。作者

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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