Azure cosmosdb “计算场”上的Cosmos db顺序

Azure cosmosdb “计算场”上的Cosmos db顺序,azure-cosmosdb,Azure Cosmosdb,我试图根据一个字符串状态选择数据。我想要的是状态“草稿”优先,所以我尝试了以下方法: SELECT * FROM c ORDER BY c.status = "draft" ? 0:1 我得到一个错误: 不支持的ORDERBY子句。按项目排序的表达式无法映射到文档路径 我查看了Microsoft站点,看到以下内容: ORDER BY子句要求索引策略包括要排序的字段的索引。Azure Cosmos DB查询运行时支持根据属性名称而不是计算属性进行排序 我想这会让我想做的事情变得不可能。。。我

我试图根据一个字符串状态选择数据。我想要的是状态“草稿”优先,所以我尝试了以下方法:

SELECT * 
FROM c 
ORDER BY c.status = "draft" ? 0:1
我得到一个错误:

不支持的ORDERBY子句。按项目排序的表达式无法映射到文档路径

我查看了Microsoft站点,看到以下内容:

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

我想这会让我想做的事情变得不可能。。。我怎样才能做到这一点?使用存储过程

编辑:

关于存储过程:实际上,我只是在考虑这个问题,这意味着,我需要在排序之前检索所有数据,这将是不好的,因为我从数据库中获取最大值100。。。有没有什么方法可以让我不必首先检索所有数据?谢谢

谢谢

按项目排序表达式无法映射到文档路径

基本上,我们只能使用文档的属性进行排序,而不能使用派生值。c、 状态=草稿?0:1是派生值

我的想法是:

查询sql的两部分:第一部分从c中选择c.*,其中c.status='draft',第二部分从c中选择c.*,其中c.status'draft'按c.status排序。最后,将它们结合起来


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

您需要将此值存储在属性中。你不能做那样的内联计算。嗨,我的答案对你有帮助吗?如果有,你可以把它标记为答案。谢谢。你好,杰,我在我的评论部分问了你一个问题,请看我文章的编辑部分,我想知道使用store proc是否会让我在只想下单时扫描整个数据库?问题是,我的状态列中有4个可能的值会影响订单,我不想执行4个查询。。。我应该试试商店程序。Thanks@Tom好的,当你遇到sp的任何问题时,只要在这里发帖,我会帮助你。Jay,实际上,我只是在考虑这个问题,这意味着,我需要在订购之前检索所有数据,这将是不好的,因为我从我的数据库中取最大值100。。。tehre有没有办法让我不必先检索所有数据?谢谢@汤姆-请不要在评论中开始讨论,或在回答下提出其他问题。在堆栈溢出中真的没有办法支持这种类型的对话。