Compartir a través de


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": "a0151c77-ffc3-4fa6-a495-7b53d936faa6",
    "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.