Выполнение запросов в пакете SDK

Завершено

Класс Microsoft.Azure.Cosmos.Container в пакете SDK содержит ряд встроенных классов для создания запроса, выдачи запроса в Azure Cosmos DB для NoSQL, настройки асинхронного потока в C#и эффективного возврата элементов клиенту.

Для начала давайте воспользуемся простой командой SQL, возвращающей все товары:

SELECT * FROM products p

Эквивалентное определение команды в C# будет использовать класс QueryDefinition :

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

Сначала определите тип C# для представления типа запрашиваемого элемента, в этом примере достаточно простого класса Product C#:

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

    public string name { get; set; }

    public string price { get; set; }
}

Затем используйте универсальный метод GetItemQueryIterator с типом Product C# в цикле await foreach. Асинхронная структура потока автоматически обрабатывает цикл и разбиение на страницы, чтобы перейти на сервер и получить каждую следующую страницу результатов. В цикле foreach добавьте код для обработки каждого элемента; в этом примере идентификатор, имя и цена каждого элемента выводится в консоль:

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

Пакет SDK для Python azure-cosmos предоставляет эффективные методы для запроса данных с помощью синтаксиса SQL, обработки разбиения на страницы и потоковой передачи результатов обратно клиенту.

Для начала давайте воспользуемся простой командой SQL, возвращающей все товары:

SELECT * FROM products p

В Python этот запрос можно передать непосредственно в виде строки в метод query_items.

Определите словарь Python для представления структуры элементов. Например, рассмотрим структуру продукта следующим образом:

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

Затем используйте метод query_items . Метод принимает строку запроса SQL и параметры ключа секции и других конфигураций. Результаты потоковой передачи эффективно используют цикл. В цикле добавьте код для обработки каждого элемента; в этом примере идентификатор, имя и цена каждого элемента выводится в консоль:

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

Пакет SDK JavaScript позволяет создавать запрос, выдавать запрос в Azure Cosmos DB для NoSQL, настраивать асинхронный поток в JavaScript и эффективно возвращать элементы клиенту.

Для начала давайте воспользуемся простой командой SQL, возвращающей все товары:

SELECT * FROM products p

Чтобы выполнить этот запрос с помощью пакета SDK javaScript, создайте объект QuerySpec или используйте строку запроса. Вот как определить строку запроса в коде:

const query = "SELECT * FROM products p";

Для структурированной обработки результатов запроса можно определить класс JavaScript, представляющий данные Product:

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

Затем используйте метод запроса для создания экземпляра класса QueryIterator. Метод принимает строку запроса SQL и параметры ключа секции и других конфигураций. Асинхронная структура потока автоматически обрабатывает цикл и разбиение на страницы, чтобы перейти на сервер и получить каждую следующую страницу результатов. В цикле добавьте код для обработки каждого элемента; в этом примере идентификатор, имя и цена каждого элемента выводится в консоль:

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

Если вы предпочитаете использовать класс Product для представления элементов, можно использовать следующий код:

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