具有自定义 order by 子句的 Cosmos DB 分页查询
Cosmos DB paginated query with custom order by clause
我想在 Cosmos DB 中执行一个 select 查询 returns 最大结果数(比如 50),然后给我继续标记,这样我就可以在我离开的地方继续搜索关闭。
现在假设我的查询在我的 where 子句中有 2 个相等条件,例如
where prop1 = "a" and prop2 = "w" and prop3 = "g"
在返回的结果中,我希望满足 prop1 = "a" 的记录首先出现,然后是 prop2 = "w" 的结果,然后是 prop3 = "g" 的结果。
为什么我需要它?因为虽然我可以将所有数据获取到我的应用程序并在那里进行排序,但显然我不能提取所有记录,因为这意味着提取太多数据。因此,如果我不能在 cosmos 本身中以这种方式对其进行排序,那么在我得到的结果中,我可能只有那些根本没有 prop1 = "a" 的记录。现在我可以继续重试直到我得到 prop1 = "a" 的结果(我需要这个因为我想将 prop1 = "a" 的结果作为第一组结果显示给用户)但我可能不得不拉因为我的 Cosmos DB 中有一个巨大的数据集,所以需要 100 次才能获得第一条记录。
我如何在 Cosmos 中处理这种情况?谢谢!
所以如果我正确理解你的问题,你想完成这个:
SELECT * FROM c
WHERE
c.prop1 = 'a'
AND
c.prop2 = 'b'
AND
c.prop3 = 'c'
ORDER BY
c.prop1, c.prop2, c.prop3
OFFSET 0 LIMIT 25
现在,幸运的是 you can now do this in CosmosDB SQL. But, there is a caveat. You have to set up a composite index 在您的 collection 中允许这样做。
因此,对于此 collection,我的综合索引将如下所示:
现在,如果我想将其更改为:
SELECT * FROM c
WHERE
c.prop1 = 'a'
AND
c.prop2 = 'b'
AND
c.prop3 = 'c'
ORDER BY
c.prop1 DESC, c.prop2, c.prop3
OFFSET 0 LIMIT 25
我可以添加另一个复合索引来涵盖 use-case。您可以在您的设置中看到它是一个数组数组,因此您可以添加任意数量的组合。
如果我正确理解你的问题,这应该会带你到达你需要去的地方。
我想在 Cosmos DB 中执行一个 select 查询 returns 最大结果数(比如 50),然后给我继续标记,这样我就可以在我离开的地方继续搜索关闭。
现在假设我的查询在我的 where 子句中有 2 个相等条件,例如
where prop1 = "a" and prop2 = "w" and prop3 = "g"
在返回的结果中,我希望满足 prop1 = "a" 的记录首先出现,然后是 prop2 = "w" 的结果,然后是 prop3 = "g" 的结果。
为什么我需要它?因为虽然我可以将所有数据获取到我的应用程序并在那里进行排序,但显然我不能提取所有记录,因为这意味着提取太多数据。因此,如果我不能在 cosmos 本身中以这种方式对其进行排序,那么在我得到的结果中,我可能只有那些根本没有 prop1 = "a" 的记录。现在我可以继续重试直到我得到 prop1 = "a" 的结果(我需要这个因为我想将 prop1 = "a" 的结果作为第一组结果显示给用户)但我可能不得不拉因为我的 Cosmos DB 中有一个巨大的数据集,所以需要 100 次才能获得第一条记录。
我如何在 Cosmos 中处理这种情况?谢谢!
所以如果我正确理解你的问题,你想完成这个:
SELECT * FROM c
WHERE
c.prop1 = 'a'
AND
c.prop2 = 'b'
AND
c.prop3 = 'c'
ORDER BY
c.prop1, c.prop2, c.prop3
OFFSET 0 LIMIT 25
现在,幸运的是 you can now do this in CosmosDB SQL. But, there is a caveat. You have to set up a composite index 在您的 collection 中允许这样做。
因此,对于此 collection,我的综合索引将如下所示:
现在,如果我想将其更改为:
SELECT * FROM c
WHERE
c.prop1 = 'a'
AND
c.prop2 = 'b'
AND
c.prop3 = 'c'
ORDER BY
c.prop1 DESC, c.prop2, c.prop3
OFFSET 0 LIMIT 25
我可以添加另一个复合索引来涵盖 use-case。您可以在您的设置中看到它是一个数组数组,因此您可以添加任意数量的组合。
如果我正确理解你的问题,这应该会带你到达你需要去的地方。