Arbeta med matriser och objekt i Azure Cosmos DB för NoSQL
GÄLLER FÖR: NoSQL
Här är ett objekt som används i exempel i den här artikeln.
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
Matriser
Du kan konstruera matriser med statiska värden, som du ser i följande exempel.
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
Du kan också använda ARRAY
uttrycket för att konstruera en matris från en underfrågas resultat. Den här frågan hämtar alla distinkta kategorier.
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"
]
}
]
Iteration
API:et för NoSQL ger stöd för iterering över JSON-matriser med nyckelordet IN
FROM
i källan.
Till exempel utför nästa fråga iteration över tags
för varje objekt i containern. Utdata delar upp matrisvärdet och jämnar ut resultatet till en enda matris.
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
Du kan filtrera ytterligare på varje enskild post i matrisen, som du ser i följande exempel:
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
Resultatet är:
[
"gear"
]
Du kan också aggregera över resultatet av en matris-iteration. Följande fråga räknar till exempel antalet taggar:
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
Resultatet är:
[
2
]
Kommentar
När du använder nyckelordet IN
för iteration kan du inte filtrera eller projicera några egenskaper utanför matrisen. I stället bör du använda självkopplingar.