Cosmos DB SQL查询如何计算子属性



我在CosmosDB数据库中有这类json文档。

{
"Version": 0,
"Entity": {
"ID": "xxxxxxx",
"EventHistory": {
"2020-04-28T16:30:35.6887561Z": "NEW",
"2020-04-28T16:35:21.1811993Z": "PROCESSED"
},
"SourceSystem": "xxxx",
"SourceSystemIdentifier": "xxxx",
"PCC": "xxx",
"StorageReference": "xxxxxxxxxxxx",
"SupplementaryData": {
"eTicketCount": "2"
}
}
}

EventHistory节点中的子属性数量是动态的。在这个例子中有两个,但它可以是任何数字。

我找不到计算节点包含多少子属性的方法。至少,我需要查询那些只声明了一个属性的对象。

仅供参考:我无法更改文件的格式。我知道将它们存储为数组会更方便。

我尝试使用ARRAY_LENGTH或COUNT函数,但由于它不是数组,因此无法应用格式。

也许您可以通过计算文本长度来计算EventHistory中有多少属性。类似这样的查询可能会为您找到只有一个属性的条目。

select * from c 
where (0 < LENGTH(ToString(c.Entity.EventHistory)) and
LENGTH(ToString(c.Entity.EventHistory)) <= maxLengthOfOneProperty)

缺点是:随着长度变化较大的属性和/或值的增加,每个渐进长度范围将变得不那么准确。

最新更新