问题描述
我想在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允许这样做。
因此,对于此集合,我的综合索引应如下所示:
现在,如果我想将其更改为此:
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
我可以添加另一个复合索引来覆盖该用例。您可以在设置中看到它是一个数组数组,因此您可以添加任意数量的组合。
如果我正确理解了您的问题,这应该使您到达需要的地方。