首页 > 解决方案 > 没有属性名称的嵌套数组上的 Cosmos DB SQL

问题描述

假设以下模式的文档

{
  "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”前缀的属性。

再次,返回的数组中的子元素的排序和分组在客户端很重要,因此希望将父元素的所有子元素分组到一个数组中。第一个查询完成不允许过滤。

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


请尝试以下 SQL:

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

结果:

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

推荐阅读