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": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"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.