Udfør forespørgsler i SDK'et

Fuldført

Klassen Microsoft.Azure.Cosmos.Container i SDK'et har en række indbyggede klasser til at oprette en forespørgsel, udstede forespørgslen til Azure Cosmos DB for NoSQL, konfigurere en asynkron stream i C#og returnere elementer effektivt til klienten.

Lad os starte med at bruge en simpel SQL-kommando, der returnerer alle produkter:

SELECT * FROM products p

Den tilsvarende kommandodefinition i C# bruger klassen QueryDefinition:

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

Først skal du definere en C#-type for at repræsentere den type element, du forespørger om, f.eks. en simpel C# Product klassen er tilstrækkelig:

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

    public string name { get; set; }

    public string price { get; set; }
}

Derefter skal du bruge GetItemQueryIterator generisk metode med typen C# Product i afvente hver løkke. Den asynkrone streamstruktur håndterer automatisk løkken og sideinddelingen for at gå til serveren og hente hver efterfølgende resultatside. I forgrundsløkken skal du tilføje din kode for at håndtere hvert element. i dette eksempel vises hvert elements id, navnog pris i konsollen:

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

Den azure-cosmos Python SDK indeholder effektive metoder til at forespørge om data ved hjælp af SQL-lignende syntaks, håndtering af sideinddeling og streaming af resultater tilbage til klienten.

Lad os starte med at bruge en simpel SQL-kommando, der returnerer alle produkter:

SELECT * FROM products p

I Python kan denne forespørgsel overføres direkte som en streng til metoden query_items.

Definer en Python-ordbog for at repræsentere elementernes struktur. Overvej f.eks. en produktstruktur som denne:

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

Brug derefter metoden query_items. Metoden accepterer SQL-forespørgselsstrengen og indstillingerne for partitionsnøgle og andre konfigurationer. Resultaterne streames effektivt ved hjælp af en løkke. I løkken skal du tilføje din kode for at håndtere hvert element. i dette eksempel vises hvert elements id, navnog pris i konsollen:

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

JavaScript SDK giver dig mulighed for at oprette en forespørgsel, udstede forespørgslen til Azure Cosmos DB for NoSQL, konfigurere en asynkron stream i JavaScript og returnere elementer effektivt til klienten.

Lad os starte med at bruge en simpel SQL-kommando, der returnerer alle produkter:

SELECT * FROM products p

Hvis du vil udføre denne forespørgsel ved hjælp af JavaScript SDK, skal du oprette et QuerySpec objekt eller bruge en forespørgselsstreng. Sådan definerer du forespørgselsstrengen i din kode:

const query = "SELECT * FROM products p";

I forbindelse med struktureret håndtering af forespørgselsresultater kan du definere en JavaScript-klasse, der repræsenterer de Product data:

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

Brug derefter metoden query til at oprette en forekomst af klassen QueryIterator. Metoden accepterer SQL-forespørgselsstrengen og indstillingerne for partitionsnøgle og andre konfigurationer. Den asynkrone streamstruktur håndterer automatisk løkken og sideinddelingen for at gå til serveren og hente hver efterfølgende resultatside. I løkken skal du tilføje din kode for at håndtere hvert element. i dette eksempel vises hvert elements id, navnog pris i konsollen:

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

Hvis du foretrækker at bruge klassen Product til at repræsentere dine varer, kan du bruge følgende kode:

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