Compartilhar via


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.