Usare matrici e oggetti in Azure Cosmos DB per NoSQL

SI APPLICA A: NoSQL

Ecco un elemento usato negli esempi in questo articolo.

{
  "name": "Sondon Fins",
  "categories": [
     { "name": "swim" },
     { "name": "gear"}
  ],
  "metadata": {
    "sku": "73310",
    "manufacturer": "AdventureWorks"
  },
  "priceInUSD": 132.35,
  "priceInCAD": 174.50
}

Matrici

È possibile costruire matrici usando valori statici, come illustrato nell'esempio seguente.

SELECT
  [p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
  {
    "priceData": [
      132.35,
      174.5
    ]
  }
]

È anche possibile usare l'espressione ARRAY per costruire una matrice dai risultati di una sottoquery. Questa query ottiene tutte le categorie distinte.

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"
    ]
  }
]

Iterazione

L'API per NoSQL fornisce il supporto per l'iterazione su matrici JSON, con la IN parola chiave nell'origine FROM .

Ad esempio, la query successiva esegue l'iterazione tags per ogni elemento nel contenitore. L'output suddivide il valore della matrice e rende flat i risultati in una singola matrice.

SELECT
    *
FROM 
  products IN products.categories
[
  {
    "name": "swim"
  },
  {
    "name": "gear"
  }
]

È possibile filtrare ulteriormente ogni singola voce della matrice, come illustrato nell'esempio seguente:

SELECT VALUE
    p.name
FROM
    p IN p.categories
WHERE
    p.name LIKE "ge%"

I risultati sono:

[
  "gear"
]

È anche possibile eseguire l’aggregazione sul risultato di un'iterazione di matrice. Ad esempio, la query seguente conta il numero di tag:

SELECT VALUE
    COUNT(1)
FROM
    p IN p.categories

I risultati sono:

[
  2
]

Nota

Quando si usa la parola chiave per l'iterazione IN , non è possibile filtrare o proiettare proprietà all'esterno della matrice. È invece consigliabile usare self-join.