CosmosDb 嵌套数组查询投影

时间:2021-02-17 18:15:28

标签: azure-cosmosdb

我想从存储在 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 属性和服务对象的“描述”属性,我想要的输出是这样的:

{
    "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"
    }
  ]
}

我无法找到此嵌套对象投影的任何示例,其中它们没有对诸如服务 [0] 之类的内容进行硬编码。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该使用 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"
            }
        ]
    }
]