Trabalhar com matrizes e objetos no Azure Cosmos DB for NoSQL
APLICA-SE A: NoSQL
Aqui está um item usado nos exemplos ao longo deste artigo.
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
Matrizes
Você pode construir matrizes usando valores estáticos, como mostrado no exemplo a seguir.
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
Você também pode usar a expressão ARRAY
para construir uma matriz a partir dos resultados de uma subconsulta. Esta consulta obtém todas as categorias distintas.
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"
]
}
]
Iteração
A API para NoSQL tem suporte para iteração sobre matrizes JSON, com a palavra-chave IN
na fonte FROM
.
Como exemplo, a próxima consulta executa a iteração sobre tags
para cada item no contêiner. A saída divide o valor da matriz e achata os resultados em uma única matriz.
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
Isso pode ser usado ainda para filtrar ainda mais cada entrada individual da matriz, como mostra o exemplo a seguir:
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
Os resultados são:
[
"gear"
]
Também é possível agregar o resultado de uma iteração de matriz. Por exemplo, a consulta a seguir conta o número de marcas:
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
Os resultados são:
[
2
]
Observação
Ao usar a palavra-chave IN
para iteração, você não pode filtrar ou projetar nenhuma propriedade fora da matriz. Em vez disso, você deve usar a autojunção.