Share via


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": "a0151c77-ffc3-4fa6-a495-7b53d936faa6",
    "categoryNames": [
      "swim",
      "gear"
    ]
  }
]

Iteration

API:et för NoSQL har stöd för iterering över JSON-matriser, med nyckelordetINFROM 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
]

Anteckning

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.