Exécuter des requêtes dans le kit SDK

Terminée

La classe Microsoft.Azure.Cosmos.Container figurant dans le kit SDK possède une série de classes intégrées pour créer une requête, soumettre la requête à Azure Cosmos DB for NoSQL, configurer un flux asynchrone en C# et retourner des éléments de manière efficace au client.

Pour commencer, nous allons utiliser une commande SQL simple qui retourne tous les produits :

SELECT * FROM products p

La définition de commande équivalente en C# utilise la classe QueryDefinition :

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

Tout d’abord, définissez un type C# pour représenter le type d’élément que vous interrogez, pour cet exemple, une classe de produit C# simple suffit :

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

    public string name { get; set; }

    public string price { get; set; }
}

Ensuite, utilisez la méthode générique GetItemQueryIterator avec le type C# Produit dans la boucle await foreach. La structure de flux asynchrone gère automatiquement la boucle et la pagination pour accéder au serveur et obtenir chaque page de résultats suivante. Dans la boucle foreach, ajoutez votre code pour gérer chaque élément ; dans cet exemple, l’ID, le nom et le prix de chaque élément sont générés dans la console :

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

Le azure-cosmos Kit de développement logiciel (SDK) Python fournit des méthodes efficaces pour interroger des données à l’aide de la syntaxe de type SQL, gérer la pagination et les résultats de diffusion en continu vers le client.

Pour commencer, nous allons utiliser une commande SQL simple qui retourne tous les produits :

SELECT * FROM products p

Dans Python, cette requête peut être transmise directement en tant que chaîne à la query_items méthode.

Définissez un dictionnaire Python pour représenter la structure de vos éléments. Par exemple, considérez une structure de produit comme suit :

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

Ensuite, utilisez la méthode query_items . La méthode accepte la chaîne et les options de requête SQL pour la clé de partition et d’autres configurations. Les résultats sont diffusés efficacement à l’aide d’une boucle. Dans la boucle, ajoutez votre code pour gérer chaque élément ; dans cet exemple, l’ID, le nom et le prix de chaque élément sont générés dans la console :

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

Le Kit de développement logiciel (SDK) JavaScript vous permet de créer une requête, d’émettre la requête auprès d’Azure Cosmos DB pour NoSQL, de configurer un flux asynchrone en JavaScript et de renvoyer efficacement les éléments au client.

Pour commencer, nous allons utiliser une commande SQL simple qui retourne tous les produits :

SELECT * FROM products p

Pour exécuter cette requête à l’aide du Kit de développement logiciel (SDK) JavaScript, créez un QuerySpec objet ou utilisez une chaîne de requête. Voici comment définir la chaîne de requête dans votre code :

const query = "SELECT * FROM products p";

Pour la gestion structurée des résultats de requête, vous pouvez définir une classe JavaScript représentant les Product données :

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

Ensuite, utilisez la méthode de requête pour créer une instance de la QueryIterator classe. La méthode accepte la chaîne et les options de requête SQL pour la clé de partition et d’autres configurations. La structure de flux asynchrone gère automatiquement la boucle et la pagination pour accéder au serveur et obtenir chaque page de résultats suivante. Dans la boucle, ajoutez votre code pour gérer chaque élément ; dans cet exemple, l’ID, le nom et le prix de chaque élément sont générés dans la console :

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 vous préférez utiliser la classe Product pour représenter vos éléments, vous pouvez utiliser le code suivant :

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