Azure cosmosdb Azure Cosmos DB-按版本字符串排序

Azure cosmosdb Azure Cosmos DB-按版本字符串排序,azure-cosmosdb,Azure Cosmosdb,目前,我有一个集合中的文档列表。每个文档都有一个versionstring字段,我想按该字段排序。虽然这个示例查询不起作用,但我正在寻找类似于以下内容的内容select*from p order by p.version desc我相信使用存储过程可以做到这一点,但如果可能的话,这是最有效的方法吗 { "productId": "...", "version": "3.6.2", "platform": "..." }, { "productId": "...", "vers

目前,我有一个集合中的文档列表。每个文档都有一个
version
string字段,我想按该字段排序。虽然这个示例查询不起作用,但我正在寻找类似于以下内容的内容
select*from p order by p.version desc
我相信使用存储过程可以做到这一点,但如果可能的话,这是最有效的方法吗

{
  "productId": "...",
  "version": "3.6.2",
  "platform": "..."
},
{
  "productId": "...",
  "version": "2.2.1",
  "platform": "..."
},
{
  "productId": "...",
  "version": "7.4.8",
  "platform": "..."
},
{
  "productId": "...",
  "version": "2.2.6",
  "platform": "..."
}

我想根据版本的各个组件进行排序 而不是整个版本字符串

基本上,我们只能使用文档的属性进行排序,而不能使用派生值。因此,您不能按子字符串(版本,0,1)对数据进行排序

2种解决方法:

1.遵循@Martion的建议:根据
版本
拆分为三个属性,并将它们添加到文档中,以便您可以像正常情况一样对它们进行排序

2.在sql中选择三个派生属性:

SELECT substring(c.version,0,1) as major,substring(c.version,2,1) as minor,substring(c.version,4,1) as patch FROM c

然后在代码中对结果进行排序,例如。

最好分别存储主属性、次属性和补丁属性,并在这三个属性上都有一个复合索引,以有效地获得正确的语义排序。是否出现错误?或者您无法按版本号进行排序?我希望根据版本的各个组件而不是整个版本字符串进行排序。感谢您的回复-我曾考虑过第二个选项,但一旦版本增长超过一位数,例如“10.0.0”,“我被水淹没了。”哈默,你可以设定优先顺序。Major>minor>patch.@Hamer您好,这里有什么进展吗?我能看到的唯一可行的解决方案是要求更新数据库模型,将这些项分解为各个部分。注意:不要使用存储过程进行大容量读取。存储的进程仅在领头副本上运行,因此不要有效地使用已配置的吞吐量。对于大容量写入,尤其是同一分区上的多文档写入,存储过程是最佳选择。