CosmosDb 嵌套数组查询投影

CosmosDb nested array query projection

我想从存储在 CosmosDb 中的文档内的嵌套数组中提取特定数据。这与报告用例相关,在该用例中,我目前过度获取了比报告所需更多的数据。

我正在使用此处 https://www.documentdb.com/sql/demo 上的 playground 中的示例文档来说明我正在尝试做的事情的示例。结构如下所示:

{
    "id": "03226",
    "description": "Babyfood, dessert, fruit pudding, orange, strained",
    "version": 1,
    "foodGroup": "Baby Foods",
    "servings": [{
            "amount": 1,
            "description": "oz",
            "weightInGrams": 28.35
        }, {
            "amount": 1,
            "description": "jar",
            "weightInGrams": 113
        }
    ],
}

假设我想获取根 ID 属性 和服务对象的 'description' 属性 我想要的输出是这样的:

{
    "id": "03226",
    "servings": [{
            "description": "oz"
        }, {
            "description": "jar"
        }
    ]
}

这是我根据需要塑造结果的收尾。

SELECT 
VALUE 
 {
   "id": c.id,
   "servings": [
      {
       "description": s.description
       }
   ]
 }

FROM c
JOIN s IN c.servings

但是,结果似乎只抢到了份量中的第一项。

{
  "id": "03226",
  "servings": [
    {
      "description": "oz"
    }
  ]
}

我无法找到这种嵌套对象投影的任何示例,其中他们没有硬编码类似 servings[0] 的内容。我该如何解决这个问题?

您应该使用 ARRAY 表达式从子查询的结果构造一个数组来实现此目的。

请试试这个SQL:

SELECT 
    c.id,ARRAY(SELECT s.description FROM s IN c.servings) AS servings 
FROM c

结果:

[
    {
        "id": "03226",
        "servings": [
            {
                "description": "oz"
            },
            {
                "description": "jar"
            }
        ]
    }
]