Cosmos db 按“计算字段”排序

Tom*_*Tom 6 azure-cosmosdb

我正在尝试根据字符串状态选择数据。我想要的是状态“草稿”首先出现,所以我尝试了以下方法:

SELECT * 
FROM c 
ORDER BY c.status = "draft" ? 0:1
Run Code Online (Sandbox Code Playgroud)

我收到错误:

不支持 ORDER BY 子句。ORDER BY 项目表达式无法映射到文档路径

我检查了微软网站,我看到了这个:

ORDER BY 子句要求索引策略包含正在排序的字段的索引。Azure Cosmos DB 查询运行时支持根据属性名称排序,而不是根据计算属性排序。

我想这使得我想要通过查询做的事情变得不可能......我怎样才能实现这一目标?使用存储过程?

编辑

关于存储过程:实际上,我只是在考虑这个,这意味着,我需要在订购之前检索所有数据,这会很糟糕,因为我从数据库中获取最大 100 值...有什么办法可以做到这一点所以我不必先检索所有数据?谢谢

谢谢!

Jay*_*ong 7

ORDER BY 项表达式无法映射到文档路径。

基本上,我们被告知只能根据文档的属性进行排序,而不能根据派生值进行排序。c.status = "draft" ? 0:1是派生值。

我的想法:

查询sql的两部分:第一部分select c.* from c where c.status ='draft',第二部分select c.* from c where c.status <> 'draft' order by c.status。最后,将它们结合起来。

或者您可以尝试使用您在问题中提到的存储过程来处理select * from c order by c.status. 通过 if-else 条件将草稿数据放在其他数据前面。