具有自定义order by子句的Cosmos DB分页查询

问题描述

我想在Cosmos DB中执行一个选择查询,该查询返回最大数量的结果(例如50),然后为我提供延续令牌,以便我可以从上次中断的地方继续搜索

现在假设我的查询在where子句中有2个相等条件,例如

where prop1 = "a" and prop2 = "w" and prop3 = "g"

在返回的结果中,我希望首先显示满足prop1 =“ a”的记录,然后显示具有prop2 =“ w”的结果,然后显示具有prop3 =“ g”的记录。

我为什么需要它?因为虽然我可以将所有数据都放入我的应用程序并在那里进行排序,但是我不能明显地拉出所有记录,因为那将意味着拉入太多数据。因此,如果我无法在宇宙本身中以这种方式对其进行排序,那么在得到的结果中,我可能只会得到那些根本没有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在CosmosDB SQL中。但是,有一个警告。您必须在集合中set up a composite index允许这样做。

因此,对于此集合,我的综合索引应如下所示:

composite index

现在,如果我想将其更改为此:

SELECT * FROM c
WHERE
        c.prop1 = 'a'
    AND
        c.prop2 = 'b'
    AND
        c.prop3 = 'c'
ORDER BY
        c.prop1 DESC,c.prop3
OFFSET 0 LIMIT 25

我可以添加另一个复合索引来覆盖该用例。您可以在设置中看到它是一个数组数组,因此您可以添加任意数量的组合。

如果我正确理解了您的问题,这应该使您到达需要的地方。