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.
Contenuto correlato
- Self-join
- Parole chiave
- Subqueries (Sottoquery)