Wykonywanie zapytań w zestawie SDK
Klasa Microsoft.Azure.Cosmos.Container w zestawie SDK zawiera szereg wbudowanych klas do tworzenia zapytania, wystawiania zapytania w usłudze Azure Cosmos DB for NoSQL, konfigurowania strumienia asynchronicznego w języku C#i wydajnego zwracania elementów z powrotem do klienta.
Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:
SELECT * FROM products p
Równoważna definicja polecenia w języku C# będzie używać klasy QueryDefinition :
QueryDefinition query = new ("SELECT * FROM products p");
Najpierw zdefiniuj typ języka C#, aby reprezentować typ elementu, którego dotyczy zapytanie, na przykład wystarczy prosta klasa C# Product:
public class Product
{
public string id { get; set; }
public string name { get; set; }
public string price { get; set; }
}
Następnie użyj ogólnej metody GetItemQueryIterator z typem Product w C# w pętli await foreach. Struktura strumienia asynchronicznego automatycznie obsługuje pętlę i paginację, w celu uzyskania danych z serwera i pobrania każdej kolejnej strony wyników. W pętli foreach dodaj kod do obsługi każdego elementu; w tym przykładzie identyfikator, nazwa i cena każdego elementu są danymi wyjściowymi konsoli:
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}");
}
}
}
Zestaw SDK języka Python azure-cosmos zapewnia wydajne metody wykonywania zapytań dotyczących danych przy użyciu składni podobnej do języka SQL, obsługi stronicowania i przesyłania strumieniowego wyników z powrotem do klienta.
Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:
SELECT * FROM products p
W języku Python to zapytanie można przekazać bezpośrednio jako ciąg do metody query_items.
Zdefiniuj słownik języka Python, aby reprezentować strukturę elementów. Rozważmy na przykład strukturę produktu w następujący sposób:
product = {
"id": "string",
"name": "string",
"price": "string"
}
Następnie użyj metody query_items. Metoda akceptuje ciąg zapytania SQL oraz parametry dotyczące klucza partycji i innych konfiguracji. Wyniki są wydajnie przesyłane strumieniowo przy użyciu pętli. W pętli dodaj kod do obsługi każdego elementu; W tym przykładzie identyfikator każdego elementu, nazwa i cena jest danymi wyjściowymi konsoli:
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']}")
Zestaw SDK języka JavaScript umożliwia utworzenie zapytania, wysłanie zapytania do usługi Azure Cosmos DB for NoSQL, skonfigurowanie strumienia asynchronicznego w języku JavaScript i wydajne zwracanie elementów z powrotem do klienta.
Aby rozpocząć, użyjmy prostego polecenia SQL, które zwraca wszystkie produkty:
SELECT * FROM products p
Aby wykonać to zapytanie przy użyciu zestawu SDK języka JavaScript, utwórz obiekt QuerySpec lub użyj ciągu zapytania. Poniżej przedstawiono sposób definiowania ciągu zapytania w kodzie:
const query = "SELECT * FROM products p";
Aby uzyskać ustrukturyzowaną obsługę wyników zapytań, można zdefiniować klasę Języka JavaScript reprezentującą dane Product:
class Product {
constructor(id, name, price) {
this.id = id;
this.name = name;
this.price = price;
}
}
Następnie użyj metody zapytania, aby utworzyć wystąpienie klasy QueryIterator. Metoda akceptuje ciąg zapytania SQL oraz parametry dotyczące klucza partycji i innych konfiguracji. Struktura strumienia asynchronicznego automatycznie obsługuje pętlę i paginację, w celu uzyskania danych z serwera i pobrania każdej kolejnej strony wyników. W pętli dodaj kod do obsługi każdego elementu; W tym przykładzie identyfikator każdego elementu, nazwa i cena jest danymi wyjściowymi konsoli:
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)}`);
}
}
Jeśli wolisz używać klasy Product do reprezentowania elementów, możesz użyć następującego kodu:
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);
});
}