azure Cosmos DB SQL查询如何统计子属性?

cngwdvgl  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(324)

我在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节点中的子属性数量是动态的。在示例中有两个,但它可以是任何数量。
我找不到计算节点包含多少子属性的方法。至少,我需要查询那些只声明了一个属性的。
FYI:我无法更改文档的格式。我知道将它们存储为数组会更方便。
我尝试使用ARRAY_LENGTH或COUNT函数,但由于它不是数组,因此无法应用前者。

uinbv5nw

uinbv5nw1#

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

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

缺点是:随着更多的属性和/或值在长度上变化很大,每个渐进长度范围将变得不太精确。

相关问题