Выполнение запросов в пакете 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);
});
}