没有属性名称的嵌套数组上的 Cosmos DB SQL

时间:2021-02-13 18:21:06

标签: azure-cosmosdb azure-cosmosdb-sqlapi

假设文档具有以下架构

{
  "id": 1,
  "children":[
       {"id": "a", "name":"al"},
       {"id": "b", "name":"bob"}
   ]
}

我想返回一个包含所有子级的数组,但在根级别的 id 属性上进行了过滤。以下是最知名的替代方案和限制:

SELECT * FROM c.children

上面的 SQL 提供了正确形状的数组数组,但它不允许我在文档的 ROOT 级别中的 ID 进行过滤。

SELECT children FROM c WHERE c.id >= 1

以上允许过滤,但返回一个对象数组,所有对象都带有包含该数组的“children”属性。

SELECT child.id, child.name FROM c JOIN child in c.children WHERE c.id >= 1

以上允许过滤,但返回一个对象数组。与前面的示例不同,对象被展平到子级别,例如名为“children”前缀的属性不存在。

同样,返回数组中的排序和分组子项在客户端很重要,因此希望将父项的所有子项返回到一个数组中。第一个查询实现了不允许过滤。

1 个答案:

答案 0 :(得分:1)

请试试这个 SQL:

SELECT value c.children FROM c WHERE c.id >= 1

结果:

[
    [
        {
            "id": "a",
            "name": "al"
        },
        {
            "id": "b",
            "name": "bob"
        }
    ]
]