咨询Cosmos DB SQL API中类似Object.keys()/values()的查询方法
Cosmos SQL API 中查询字典结构的键与值
由于变更检测存在数组排序问题,且数组内Schema不一致,你选择将对象数组结构化为以对象ID为键的字典(JSON对象),比如放弃如下数组结构:
{id: 'abc', items: [{id: 'xyz', text:'foo'},{id: 'wxy', name:'bar'}]}
改用字典结构:
{id: 'abc', items: {'xyz': {text:'foo'},'wxy': {name:'bar'}}}
针对这种结构,Cosmos SQL API提供了和JavaScript中Object.keys()、Object.values()对应的函数,以下是具体用法:
获取字典的所有键
使用OBJECT_KEYS()函数,传入目标字典字段即可提取所有键的数组:
SELECT c.id, OBJECT_KEYS(c.items) AS itemKeys FROM c WHERE c.id = 'abc'
查询结果中,itemKeys字段会返回["xyz", "wxy"]。
获取字典的所有值
使用OBJECT_VALUES()函数,可提取字典内所有值组成的数组:
SELECT c.id, OBJECT_VALUES(c.items) AS itemValues FROM c WHERE c.id = 'abc'
查询结果中,itemValues字段会返回[{"text":"foo"}, {"name":"bar"}]。
同时获取键与对应的值
如果需要将键和对应的值配对返回,可以结合ARRAY()与数组推导式实现:
SELECT c.id, ARRAY( SELECT {'key': k, 'value': c.items[k]} FROM k IN OBJECT_KEYS(c.items) ) AS itemKeyValuePairs FROM c WHERE c.id = 'abc'
查询结果中,itemKeyValuePairs字段会返回:
[ {"key": "xyz", "value": {"text":"foo"}}, {"key": "wxy", "value": {"name":"bar"}} ]
这些函数不受字典内键名不一致的影响,完全适配你场景中Schema不统一的字典结构。
内容的提问来源于stack exchange,提问作者frigon
相关产品推荐
相关产品推荐

