Работа с массивами и объектами в Azure Cosmos DB для 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": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"categoryNames": [
"swim",
"gear"
]
}
]
Итерация
API для NoSQL обеспечивает поддержку итерации массивов JSON с IN
ключевым словом в источнике FROM
.
Например, следующий запрос выполняет итерацию 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
слова для итерации нельзя фильтровать или проектовать любые свойства за пределами массива. Вместо этого следует использовать самосоединяемые соединения.