Wykonywanie zapytań w zestawie SDK

Ukończone

Klasa Microsoft.Azure.Cosmos.Container w zestawie SDK zawiera szereg wbudowanych klas do tworzenia zapytania, wystawiania zapytania w usłudze Azure Cosmos DB for NoSQL, konfigurowania strumienia asynchronicznego w języku C#i wydajnego zwracania elementów z powrotem do klienta.

Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:

SELECT * FROM products p

Równoważna definicja polecenia w języku C# będzie używać klasy QueryDefinition :

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

Najpierw zdefiniuj typ języka C#, aby reprezentować typ elementu, którego dotyczy zapytanie, na przykład wystarczy prosta klasa C# Product:

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

    public string name { get; set; }

    public string price { get; set; }
}

Następnie użyj ogólnej metody GetItemQueryIterator z typem Product w C# w pętli await foreach. Struktura strumienia asynchronicznego automatycznie obsługuje pętlę i paginację, w celu uzyskania danych z serwera i pobrania każdej kolejnej strony wyników. W pętli foreach dodaj kod do obsługi każdego elementu; w tym przykładzie identyfikator, nazwa i cena każdego elementu są danymi wyjściowymi konsoli:

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}");
        }
    }
}

Zestaw SDK języka Python azure-cosmos zapewnia wydajne metody wykonywania zapytań dotyczących danych przy użyciu składni podobnej do języka SQL, obsługi stronicowania i przesyłania strumieniowego wyników z powrotem do klienta.

Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:

SELECT * FROM products p

W języku Python to zapytanie można przekazać bezpośrednio jako ciąg do metody query_items.

Zdefiniuj słownik języka Python, aby reprezentować strukturę elementów. Rozważmy na przykład strukturę produktu w następujący sposób:

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

Następnie użyj metody query_items. Metoda akceptuje ciąg zapytania SQL oraz parametry dotyczące klucza partycji i innych konfiguracji. Wyniki są wydajnie przesyłane strumieniowo przy użyciu pętli. W pętli dodaj kod do obsługi każdego elementu; W tym przykładzie identyfikator każdego elementu, nazwa i cena jest danymi wyjściowymi konsoli:

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']}")

Zestaw SDK języka JavaScript umożliwia utworzenie zapytania, wysłanie zapytania do usługi Azure Cosmos DB for NoSQL, skonfigurowanie strumienia asynchronicznego w języku JavaScript i wydajne zwracanie elementów z powrotem do klienta.

Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:

SELECT * FROM products p

Aby wykonać to zapytanie przy użyciu zestawu SDK języka JavaScript, utwórz obiekt QuerySpec lub użyj ciągu zapytania. Poniżej przedstawiono sposób definiowania ciągu zapytania w kodzie:

const query = "SELECT * FROM products p";

Aby uzyskać ustrukturyzowaną obsługę wyników zapytań, można zdefiniować klasę Języka JavaScript reprezentującą dane Product:

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

Następnie użyj metody zapytania, aby utworzyć wystąpienie klasy QueryIterator. Metoda akceptuje ciąg zapytania SQL oraz parametry dotyczące klucza partycji i innych konfiguracji. Struktura strumienia asynchronicznego automatycznie obsługuje pętlę i paginację, w celu uzyskania danych z serwera i pobrania każdej kolejnej strony wyników. W pętli dodaj kod do obsługi każdego elementu; W tym przykładzie identyfikator każdego elementu, nazwa i cena jest danymi wyjściowymi konsoli:

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)}`);
    }
}

Jeśli wolisz używać klasy Product do reprezentowania elementów, możesz użyć następującego kodu:

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);
    });
}