Freigeben über


Arbeiten mit Arrays und Objekten in Azure Cosmos DB for NoSQL

GILT FÜR: NoSQL

Hier ist ein Element, das in Beispielen in diesem Artikel verwendet wird.

{
  "name": "Sondon Fins",
  "categories": [
     { "name": "swim" },
     { "name": "gear"}
  ],
  "metadata": {
    "sku": "73310",
    "manufacturer": "AdventureWorks"
  },
  "priceInUSD": 132.35,
  "priceInCAD": 174.50
}

Arrays

Sie können Arrays mithilfe von statischen Werten erstellen, wie im folgenden Beispiel gezeigt wird.

SELECT
  [p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
  {
    "priceData": [
      132.35,
      174.5
    ]
  }
]

Sie können auch den Ausdruck ARRAY verwenden, um ein Array aus den Ergebnissen einer Unterabfrage zu erstellen. Diese Abfrage ruft alle verschiedenen Kategorien ab.

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

Die API für NoSQL unterstützt eine Iteration über JSON-Arrays mit dem Schlüsselwort IN in der Quelle FROM.

Beispielsweise führt die nächste Abfrage eine Iteration über tags für jedes Element im Container aus. Die Ausgabe teilt den Arraywert auf und vereinfacht die Ergebnisse in ein einzelnes Array.

SELECT
    *
FROM 
  products IN products.categories
[
  {
    "name": "swim"
  },
  {
    "name": "gear"
  }
]

Sie können die einzelnen Einträge im Array weiter filtern wie im folgenden Beispiel gezeigt:

SELECT VALUE
    p.name
FROM
    p IN p.categories
WHERE
    p.name LIKE "ge%"

Die Ergebnisse sind:

[
  "gear"
]

Sie können auch das Ergebnis einer Array-Iteration aggregieren. Die folgende Abfrage beispielsweise zählt die Anzahl von Tags:

SELECT VALUE
    COUNT(1)
FROM
    p IN p.categories

Die Ergebnisse sind:

[
  2
]

Hinweis

Wenn Sie das Schlüsselwort IN für die Iteration verwenden, können Sie Eigenschaften außerhalb des Arrays nicht filtern oder projizieren. Stattdessen sollten Sie Selbstjoins verwenden.