Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO: NoSQL
Položky ve službě Azure Cosmos DB představují entity uložené v kontejneru. V rozhraní API pro NoSQL se položka skládá z dat ve formátu JSON s jedinečným identifikátorem. Při použití rozhraní API pro NoSQL jsou výsledky vráceny jako pole obsahující JSON dokumenty.
Dotazování položek pomocí SQL
Azure Cosmos DB for NoSQL podporuje použití jazyka SQL (Structured Query Language) k provádění dotazů na položky v kontejnerech. Jednoduchý dotaz SQL, jako SELECT * FROM products je, vrátí všechny položky a vlastnosti z kontejneru. Dotazy můžou být ještě složitější a zahrnují konkrétní projekce polí, filtry a další běžné klauzule SQL:
SELECT
p.name,
p.description AS copy
FROM
products p
WHERE
p.price > 500
Další informace o syntaxi SQL pro Azure Cosmos DB for NoSQL najdete v tématu Začínáme s dotazy SQL.
Dotazování položky
Poznámka:
Příklady v tomto článku předpokládají, že jste již definovali typ jazyka C#, který představuje vaše data s názvem Product:
// C# record type for items in the container
public record Product(
string id,
string category,
string name,
int quantity,
bool sale
);
Pokud chcete dotazovat položky v kontejneru, zavolejte jednu z následujících metod:
Dotazování položek pomocí dotazu SQL asynchronně
Tento příklad sestaví dotaz SQL pomocí jednoduchého řetězce, načte iterátor informačního kanálu a pak pomocí vnořených smyček iteruje výsledky. Vnější smyčka while bude opakovaně procházet stránky výsledků, zatímco vnitřní smyčka foreach prochází výsledky na stránce.
// Query multiple items from container
using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
queryText: "SELECT * FROM products p WHERE p.quantity > 10"
);
// Iterate query result pages
while (feed.HasMoreResults)
{
FeedResponse<Product> response = await feed.ReadNextAsync();
// Iterate query results
foreach (Product item in response)
{
Console.WriteLine($"Found item:\t{item.name}");
}
}
Metoda Container.GetItemQueryIterator<> vrátí FeedIterator<>, který se používá k procházení výsledků s více stránkami. Tato HasMoreResults vlastnost označuje, jestli zbývá více výsledných stránek. Metoda ReadNextAsync získá další stránku výsledků jako výčet, který se pak použije ve smyčce iterace výsledků.
Alternativně použijte QueryDefinition k sestavení dotazu SQL s parametrizovaným vstupem:
// Build query definition
var parameterizedQuery = new QueryDefinition(
query: "SELECT * FROM products p WHERE p.quantity > @quantity"
)
.WithParameter("@quantity", 10);
// Query multiple items from container
using FeedIterator<Product> filteredFeed = container.GetItemQueryIterator<Product>(
queryDefinition: parameterizedQuery
);
// Iterate query result pages
while (filteredFeed.HasMoreResults)
{
FeedResponse<Product> response = await filteredFeed.ReadNextAsync();
// Iterate query results
foreach (Product item in response)
{
Console.WriteLine($"Found item:\t{item.name}");
}
}
Tip
Parametrizované vstupní hodnoty můžou pomoct zabránit mnoha běžným útokům prostřednictvím injektáže dotazů SQL.
Dotazování položek pomocí LINQ asynchronně
V tomto příkladu IQueryable<> se objekt používá k vytvoření jazyka Integrated Query (LINQ). Výsledky se pak iterují pomocí iterátoru.
// Get LINQ IQueryable object
IOrderedQueryable<Product> queryable = container.GetItemLinqQueryable<Product>();
// Construct LINQ query
var matches = queryable
.Where(p => p.quantity > 10);
// Convert to feed iterator
using FeedIterator<Product> linqFeed = matches.ToFeedIterator();
// Iterate query result pages
while (linqFeed.HasMoreResults)
{
FeedResponse<Product> response = await linqFeed.ReadNextAsync();
// Iterate query results
foreach (Product item in response)
{
Console.WriteLine($"Matched item:\t{item.name}");
}
}
Metoda Container.GetItemLinqQueryable<> konstruktuje IQueryable, který slouží k vytvoření dotazu LINQ.
ToFeedIterator<> Pak se metoda použije k převodu výrazu dotazu LINQ na .FeedIterator<>
Tip
I když můžete iterovat nad IQueryable<>, tato operace je synchronní.
ToFeedIterator<> Pomocí metody můžete asynchronně shromáždit výsledky.
Další kroky
Teď, když jste se dotazovali na více položek, vyzkoušejte jeden z našich kompletních kurzů s rozhraním API pro NoSQL.