Delen via


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.