Ausführen von Abfragen im SDK

Abgeschlossen

Die Microsoft.Azure.Cosmos.Container-Klasse im SDK verfügt über integrierte Klassen, um eine Abfrage zu erstellen, die Abfrage an Azure Cosmos DB for NoSQL auszugeben, einen asynchronen Datenstrom in C# festzulegen und Elemente effizient an den Client zurückzugeben.

Verwenden Sie zunächst einen einfachen SQL-Befehl, der alle Produkte zurückgibt:

SELECT * FROM products p

Die entsprechende Befehlsdefinition in C# würde die QueryDefinition-Klasse verwenden:

QueryDefinition query = new ("SELECT * FROM products p");

Definieren Sie zunächst einen C#-Typ, der den Abfragetyp darstellt, z. B. eine einfache C#-Product-Klasse:

public class Product
{
    public string id { get; set; }

    public string name { get; set; }

    public string price { get; set; }
}

Verwenden Sie als Nächstes die generische GetItemQueryIterator-Methode mit dem C#-Product-Typ in der await foreach-Schleife. Die asynchrone Datenstromstruktur behandelt die Schleifen- und Paginierung automatisch, um zum Server zu wechseln, und ruft jede nachfolgende Seite mit Ergebnissen ab. Fügen Sie innerhalb der foreach-Schleife Ihren Code hinzu, um jedes Element zu verarbeiten. In diesem Beispiel werden id, name und price jedes Elements in der Konsole ausgegeben:

using (FeedIterator<Product> feedIterator = this.Container.GetItemQueryIterator<Product>(
    query,
    null,
    new QueryRequestOptions() { }))
{
    while (feedIterator.HasMoreResults)
    {
        foreach(var item in await feedIterator.ReadNextAsync())
        {
            Console.WriteLine($"[{item.productid}]\t{item.name,35}\t{item.price,15:C}");
        }
    }
}

Das azure-cosmos Python SDK bietet effiziente Methoden zum Abfragen von Daten mithilfe von SQL-ähnlicher Syntax, behandlung von Paginierung und Streamingergebnissen zurück an den Client.

Verwenden Sie zunächst einen einfachen SQL-Befehl, der alle Produkte zurückgibt:

SELECT * FROM products p

In Python kann diese Abfrage direkt als Zeichenfolge an die query_items-Methode übergeben werden.

Definieren Sie ein Python-Wörterbuch, um die Struktur Ihrer Elemente darzustellen. Betrachten Sie z. B. eine Produktstruktur wie folgt:

product = {
    "id": "string",
    "name": "string",
    "price": "string"
}

Verwenden Sie als Nächstes die query_items-Methode. Die Methode akzeptiert die SQL-Abfragezeichenfolge und -Optionen für Partitionsschlüssel und andere Konfigurationen. Die Ergebnisse werden effizient mithilfe einer Schleife gestreamt. Fügen Sie in der Schleife Ihren Code hinzu, um die einzelnen Elemente zu behandeln. In diesem Beispiel wird die ID jedes Elements, Nameund Preis in die Konsole ausgegeben:

query = "SELECT * FROM products p"
for item in container.query_items(
    query=query,
    enable_cross_partition_query=True):
    print(f"{item['id']}\t{item['name']}\t{item['price']}")

Mit dem JavaScript SDK können Sie eine Abfrage erstellen, die Abfrage an Azure Cosmos DB für NoSQL ausgeben, einen asynchronen Stream in JavaScript einrichten und Elemente effizient an den Client zurückgeben.

Verwenden Sie zunächst einen einfachen SQL-Befehl, der alle Produkte zurückgibt:

SELECT * FROM products p

Um diese Abfrage mit dem JavaScript SDK auszuführen, erstellen Sie ein QuerySpec-Objekt, oder verwenden Sie eine Abfragezeichenfolge. So definieren Sie die Abfragezeichenfolge in Ihrem Code:

const query = "SELECT * FROM products p";

Für die strukturierte Behandlung von Abfrageergebnissen können Sie eine JavaScript-Klasse definieren, die die Product Daten darstellt:

class Product {
    constructor(id, name, price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

Verwenden Sie als Nächstes die Abfrage Methode, um eine Instanz der QueryIterator Klasse zu erstellen. Die Methode akzeptiert die SQL-Abfragezeichenfolge und -Optionen für Partitionsschlüssel und andere Konfigurationen. Die asynchrone Datenstromstruktur behandelt die Schleifen- und Paginierung automatisch, um zum Server zu wechseln, und ruft jede nachfolgende Seite mit Ergebnissen ab. Fügen Sie in der Schleife Ihren Code hinzu, um die einzelnen Elemente zu behandeln. In diesem Beispiel wird die ID jedes Elements, Nameund Preis in die Konsole ausgegeben:

const iterator = container.items.query(
    query,
    { enableCrossPartitionQuery: true }
);

while (iterator.hasMoreResults()) {
    const { resources } = await iterator.fetchNext();
    for (const item of resources) {
        console.log(`[${item.id}]	${item.name.padEnd(35)}	${item.price.toFixed(2)}`);
    }
}

Wenn Sie die klasse Product verwenden möchten, um Ihre Elemente darzustellen, können Sie den folgenden Code verwenden:

const iterator = container.items.query(
    query,
    { enableCrossPartitionQuery: true }
);

while (iterator.hasMoreResults()) {
    const { resources } = await iterator.fetchNext();
    // Bind the results to the Product class.
    const products = resources.map((product) => {
        return new Product(product.id, product.name, 0);
    });
}