Werken met matrices en objecten in Azure Cosmos DB for NoSQL
VAN TOEPASSING OP: NoSQL
Hier volgt een item dat wordt gebruikt in voorbeelden in dit artikel.
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
Matrices
U kunt matrices maken met behulp van statische waarden, zoals wordt weergegeven in het volgende voorbeeld.
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
U kunt de ARRAY
expressie ook gebruiken om een matrix te maken op basis van de resultaten van een subquery. Met deze query worden alle afzonderlijke categorieën ophaalt.
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"
]
}
]
Iteratie
De API voor NoSQL biedt ondersteuning voor het herhalen van JSON-matrices, met het IN
trefwoord in de FROM
bron.
De volgende query voert bijvoorbeeld iteratie tags
uit voor elk item in de container. De uitvoer splitst de matrixwaarde en vervlakt de resultaten in één matrix.
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
U kunt verder filteren op elke afzonderlijke vermelding van de matrix, zoals wordt weergegeven in het volgende voorbeeld:
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
U ziet deze uitvoer:
[
"gear"
]
U kunt ook aggregeren over het resultaat van een matrix-iteratie. Met de volgende query wordt bijvoorbeeld het aantal tags geteld:
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
U ziet deze uitvoer:
[
2
]
Notitie
Wanneer u het IN
trefwoord voor iteratie gebruikt, kunt u geen eigenschappen buiten de matrix filteren of projecteren. In plaats daarvan moet u self-joins gebruiken.