Kyl*_*yle 5 json azure azure-cosmosdb
我在制作 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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想编写一个查询,该查询将返回所有名字为“Bob”的人
我需要类似的东西:
Select * from c where c.data.people[*].first_name = "Bob";
Run Code Online (Sandbox Code Playgroud)
请注意,“people”对象是一个实际的 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;
}
Run Code Online (Sandbox Code Playgroud)
SQL:
SELECT udf.test(c.data.people) as BobPeople FROM c
Run Code Online (Sandbox Code Playgroud)
样本数据:
输出:
| 归档时间: |
|
| 查看次数: |
7565 次 |
| 最近记录: |