Trabajo con matrices y objetos en Azure Cosmos DB for NoSQL
SE APLICA A: NoSQL
Este es un elemento que se usa en ejemplos de este artículo.
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
Matrices
Puede construir matrices con valores estáticos, como se muestra en el ejemplo siguiente.
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
También puede usar la expresión ARRAY
para construir una matriz a partir de los resultados de la subconsulta. Esta consulta obtiene todas las categorías 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"
]
}
]
Iteración
La API para NoSQL permite iterar en las matrices JSON mediante la palabra clave IN
en el origen FROM
.
Por ejemplo, la siguiente consulta realiza una iteración tags
para cada elemento del contenedor. La salida divide el valor de la matriz y aplana los resultados en una sola matriz.
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
Puede filtrar aún más por cada entrada individual de la matriz, como se muestra en el ejemplo siguiente:
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
Los resultados son:
[
"gear"
]
También puede aplicar agregaciones al resultado de la iteración de una matriz. Por ejemplo, la siguiente consulta cuenta el número de etiquetas:
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
Los resultados son:
[
2
]
Nota:
Cuando se usa la palabra clave IN
para la iteración, no se pueden filtrar ni proyectar las propiedades fuera de la matriz. En su lugar, debería usar autocombinaciones.