Ejecución de consultas en el SDK

Completado

La clase Microsoft.Azure.Cosmos.Container del SDK tiene una serie de clases integradas para crear una consulta, emitir la consulta a Azure Cosmos DB for NoSQL, configurar una secuencia asincrónica en C# y devolver elementos de forma eficaz al cliente.

Para empezar, vamos a usar un comando de SQL sencillo que devuelve todos los productos:

SELECT * FROM products p

La definición de comando equivalente en C# usaría la clase QueryDefinition:

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

En primer lugar, defina un tipo de C# para representar el tipo de elemento que consulta, en este ejemplo, basta con una clase simple de C# Product:

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

    public string name { get; set; }

    public string price { get; set; }
}

Después, use el método genérico GetItemQueryIterator con el tipo Product de C# en el bucle await foreach. La estructura de secuencia asincrónica controla automáticamente el bucle y la paginación para ir al servidor y obtener cada página posterior de resultados. En el bucle foreach, agregue el código para controlar cada elemento. En este ejemplo, el id, name y price de cada elemento se emiten en la consola:

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

El SDK de Python de azure-cosmos proporciona métodos eficaces para consultar datos mediante sintaxis similar a SQL, controlar la paginación y volver a transmitir los resultados al cliente.

Para empezar, vamos a usar un comando de SQL sencillo que devuelve todos los productos:

SELECT * FROM products p

En Python, esta consulta se puede pasar directamente como una cadena al método query_items.

Defina un diccionario de Python para representar la estructura de los elementos. Por ejemplo, considere una estructura de productos como esta:

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

A continuación, use el método query_items. El método acepta la cadena de consulta SQL y las opciones para la clave de partición y otras configuraciones. Los resultados se transmiten de forma eficaz mediante un bucle . Dentro del bucle, agregue el código para controlar cada elemento; en este ejemplo, el identificador de de cada elemento, nombrey precio se genera en la consola:

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

El SDK de JavaScript permite crear una consulta, emitir la consulta a Azure Cosmos DB para NoSQL, configurar una secuencia asincrónica en JavaScript y devolver elementos de forma eficaz al cliente.

Para empezar, vamos a usar un comando de SQL sencillo que devuelve todos los productos:

SELECT * FROM products p

Para ejecutar esta consulta mediante el SDK de JavaScript, cree un objeto QuerySpec o use una cadena de consulta. Esta es la forma en que define la cadena de consulta en el código:

const query = "SELECT * FROM products p";

Para el control estructurado de los resultados de la consulta, puede definir una clase JavaScript que represente los datos Product:

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

A continuación, use el método consulta para crear una instancia de la clase QueryIterator. El método acepta la cadena de consulta SQL y las opciones para la clave de partición y otras configuraciones. La estructura de secuencia asincrónica controla automáticamente el bucle y la paginación para ir al servidor y obtener cada página posterior de resultados. Dentro del bucle, agregue el código para controlar cada elemento; en este ejemplo, el identificador de de cada elemento, nombrey precio se genera en la consola:

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

Si prefiere usar la clase Product para representar los elementos, puede usar el código siguiente:

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