这是我来自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
级别上分页不起作用的原因?
答案 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