Cosmos容器查询故障:无法返回各featureTag的最新版本条目
Cosmos DB 查询修复:获取每个featureTag的最新版本条目
你的查询之所以返回所有条目,核心问题是version字段是字符串类型——Cosmos DB的MAX()函数对字符串做的是字典序比较,而非数值比较。比如字符串"10"会被判定为小于"2",导致无法正确筛选出最高版本的条目。
修复后的查询(推荐方案)
将version字段转为数值类型后再计算最大值,确保逻辑按数值大小判断:
SELECT c FROM c JOIN ( SELECT c.featureTag, MAX(CAST(c.version AS INT)) AS latest_version FROM c GROUP BY c.featureTag ) AS latest_versions WHERE c.featureTag = latest_versions.featureTag AND CAST(c.version AS INT) = latest_versions.latest_version
说明
- 用
CAST(c.version AS INT)将字符串类型的version转为整数,让MAX()按数值大小计算每个featureTag的最高版本 - WHERE条件中同样对version做类型转换,确保匹配到正确的条目
- 如果你的version是带小数的格式(比如"1.5"),可以把
INT替换为FLOAT
测试验证
假设容器内有以下两个同featureTag的条目:
{ "featureName": "Extra File Download", "featureTag": "Extrafile-download", "version": "2", "startTime": "2024-03-21T17:00:00", "endTime": "2024-03-22T16:00:00", "groups": ["EXTENSION-Factory"], "factoryAffiliations": ["AAA"], "dependencyFeatures": ["usecase-code"] } { "featureName": "Extra File Download", "featureTag": "Extrafile-download", "version": "10", "startTime": "2024-03-23T17:00:00", "endTime": "2024-03-24T16:00:00", "groups": ["EXTENSION-Factory"], "factoryAffiliations": ["AAA"], "dependencyFeatures": ["usecase-code"] }
原查询会返回version为"2"的条目(字符串字典序"2">"10"),修复后的查询会正确返回version为"10"的最新条目。
内容的提问来源于stack exchange,提问作者Md Tauhid
相关产品推荐
相关产品推荐

