json - 在 azure CosmosDb 中查询嵌套的 JSON 属性
问题描述
我在为 cosmosDB 中的嵌套数据设计查询时遇到了一些困难。
假设我有数据存储在这个结构中:
{
id:"1234",
data:{
people:{
"a826bbc5-add9-42d8-ba52-f5de52973556":{
first_name: "Kyle"
},
"efb119d-9f12-4d11-a7e1-38e4719a699c":{
first_name: "Bob"
},
"b402faac-d1ba-4317-9ba6-673c76a8fc37":{
first_name: "Jane"
}
}
}
}
现在我想编写一个查询,返回所有名字为“Bob”的人
我需要类似的东西:
Select * from c where c.data.people[*].first_name = "Bob";
请注意,“人”对象是一个实际的 JSON 对象,而不是 JSON 数组,所以没有 array_contains,我基本上需要 JSON obj 等价物。
我环顾四周,似乎找不到适合这个常见用例的查询。
任何人都知道我可以如何完成这个查询?
解决方案
由于people
对象的键是随机的,恐怕你不能用普通的sql查询它。我试图在cosmos db中用UDF实现你的需求。
udf代码:
function userDefinedFunction(peopleObj){
var returnArray = [];
for(var key in peopleObj){
if (peopleObj[key].first_name == "Bob"){
var map = {};
map[key] = peopleObj[key];
returnArray.push(map);
}
}
return returnArray;
}
数据:
SELECT udf.test(c.data.people) as BobPeople FROM c
样本数据:
输出:
推荐阅读
- sql - 错误:数字类型的输入语法无效:“”
- python - 使用 pem 密钥和客户端证书的 KAFKA SSL 连接
- java - 当用户停止在 Java TextArea 中输入时如何在另一个线程中保存和拼写检查
- sql - 每日入住查询
- xml - 查找具有最大值的 xml 元素属性会导致解析错误
- java - 如何使用 Apache Camel 和 MongoDB 创建动态 equals 查询?
- python - Python按列名只读特定列excel表
- sql-server - 快餐销售点系统数据库问题
- go - Golang BigQuery - 处理包含重复字段的行并将它们切片
- windows - 如何使用 FFmpeg 和 GeForce 硬件将 4K MKV 电影解码和编码为 1080p