我想从存储在 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] 之类的内容进行硬编码。我该如何解决这个问题?
答案 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"
}
]
}
]