查询 azure CosmosDb 中的嵌套 JSON 属性

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。

我环顾四周,似乎找不到适合这个常见用例的查询。

有人知道我如何完成这个查询吗?

Jay*_*ong 2

由于对象的键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)

样本数据:

在此输入图像描述

输出:

在此输入图像描述