在 Azure Cosmos DB for NoSQL 中使用数组和对象
适用范围: NoSQL
下面是本文中示例中使用的项。
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
数组
可以使用静态值构造数组,如以下示例所示。
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
还可以使用 ARRAY
表达式根据子查询的结果构造数组。 此查询获取所有非重复类别。
SELECT
p.id,
ARRAY (SELECT DISTINCT VALUE c.name FROM c IN p.categories) AS categoryNames
FROM
products p
[
{
"id": "a0151c77-ffc3-4fa6-a495-7b53d936faa6",
"categoryNames": [
"swim",
"gear"
]
}
]
迭代
NoSQL 的 API 支持在 JSON 数组上迭代,在 FROM
源中使用 IN
关键字。
例如,下一个查询对容器中的每个项执行 tags
迭代。 输出拆分数组值并将结果平展为单个数组。
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
可以进一步筛选该数组的每个条目,如以下示例所示:
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
其结果是:
[
"gear"
]
还可基于数组迭代的结果进行聚合。 例如,以下查询统计标记的数量:
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
结果有:
[
2
]
注意
使用 IN
关键字进行迭代时,不能筛选或投射数组外部的任何属性。 应改用自联接。