我使用REST API和SQL for Cosmos db,并且需要返回按时间戳排序的查询结果(存储为UNIX数字时间戳)。我试图通过简单的ORDER BY来做到这一点。
e.g. SELECT * FROM requests c ORDER BY c.timestamp
然而,通过分区我得到错误:
"使用TOP / ORDER BY或聚合函数的交叉分区查询不是 。支持"
在集合设置中,字符串的索引精度设置为-1,这是来自其他地方的建议,但仍然会抛出错误。
如果我将x-ms-documentdb-query-enablecrosspartition标头删除或设置为false,那么我得到:
"需要交叉分区查询但已禁用。请设置 x-ms-documentdb-query-enablecrosspartition为true,指定 x-ms-documentdb-partitionkey,或修改您的查询以避免这种情况 。例外"
有没有人通过SQL REST API做到这一点有什么成功?
感谢。
答案 0 :(得分:3)
我在你身边重现你的问题。
但是,基于此官方statement,java
sdk和node.js
sdk支持对分区集合的TOP
和ORDER BY
查询。我通过sdk测试相同的查询,它可以工作。
更新答案:
我使用Flidder
工具来观察SDK的请求,我发现了三个请求。
<强> 一: 强>
当我运行上面的sdk代码时,第一个请求如下所示,并且收到的是完全相同的错误。但是,sdk会重试我获取分区的_rid
属性。
<强> 两个 强>
我没有找到关于此的任何明确的官方解释。但是,在阅读此article之后,我认为这里的交叉分区是指物理分区,而不是逻辑分区。因此,请求帮助我们获得&#34; rid&#34;您的数据存储在PartitionKeyRanges
。
<强> 三: 强>
然后sdk向我发送更新请求,附加属性:x-ms-documentdb-partitionkeyrangeid
。并正确返回查询结果。请注意上一个请求中的更新sql。
我认为您可以效仿SDK为我们提供的满足您需求的请求。