Udfør forespørgsler i SDK'et
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);
});
}