CosmosDB 分页 Return 不正确的页面大小
CosmosDB Paging doesn't Return Correct Page Size
这是我来自 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
总是查询 return 数组中的所有项目。 Authors
的查询是:
SELECT c.Authors FROM c WHERE c.BookID = "100"
结果不正确,页面大小 = 1,页码 = 1。最终 return 所有 3 位作者。
所以我在想,也许在 Cosmosdb 中它使用 Book
作为对象,而分页仅适用于 Book
级别?这就是 Authors
级别的分页不起作用的原因?
我认为对分页存在一些误解:分页与返回文档相关,而不是文档的一部分。
如果您要求数组元素,这就是您将得到的。你会得到完整的数组,而不是一个子集。现在,如果您有 100 个文档,每个文档都具有相同的 BookID=100
,那么分页将影响返回这 100 个文档中的多少。
如果您想在这种情况下查询作者,您可以执行以下操作:
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
这是我来自 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
总是查询 return 数组中的所有项目。 Authors
的查询是:
SELECT c.Authors FROM c WHERE c.BookID = "100"
结果不正确,页面大小 = 1,页码 = 1。最终 return 所有 3 位作者。
所以我在想,也许在 Cosmosdb 中它使用 Book
作为对象,而分页仅适用于 Book
级别?这就是 Authors
级别的分页不起作用的原因?
我认为对分页存在一些误解:分页与返回文档相关,而不是文档的一部分。
如果您要求数组元素,这就是您将得到的。你会得到完整的数组,而不是一个子集。现在,如果您有 100 个文档,每个文档都具有相同的 BookID=100
,那么分页将影响返回这 100 个文档中的多少。
如果您想在这种情况下查询作者,您可以执行以下操作:
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