DocumentDB - Sorgu Belgesi
DocumentDB'de, belgeleri sorgulamak için aslında SQL kullanıyoruz, bu nedenle bu bölüm tamamen DocumentDB'deki özel SQL sözdizimini kullanarak sorgulama ile ilgili. .NET geliştirme yapıyor olsanız da, kullanılabilecek ve bir LINQ sorgusundan uygun SQL oluşturabilen bir LINQ sağlayıcısı da vardır.
Portal kullanarak Belgeyi Sorgulama
Azure portalında, DocumentDB veritabanınızda herhangi bir SQL sorgusu çalıştırmanıza olanak tanıyan bir Sorgu Gezgini bulunur.
Mümkün olan en basit sorgudan başlayarak sorgu dilinin birçok farklı özelliğini ve özelliğini göstermek için Sorgu Gezgini'ni kullanacağız.
Step 1 - Veritabanı dikey penceresinde, Sorgu Gezgini dikey penceresini açmak için tıklayın.
Sorguların bir koleksiyon kapsamında çalıştığını ve bu nedenle Sorgu Gezgini'nin bu açılır menüden koleksiyonu seçmenize izin verdiğini unutmayın.
Step 2 - Portalı kullanarak daha önce oluşturulan Aileler koleksiyonunu seçin.
Sorgu Gezgini, koleksiyondaki tüm belgeleri basitçe alan bu basit SELECT * FROM c sorgusuyla açılır.
Step 3- 'Sorguyu çalıştır' düğmesini tıklayarak bu sorguyu yürütün. Ardından, tüm belgenin Sonuçlar satırında alındığını göreceksiniz.
Net SDK kullanarak Belgeyi Sorgulama
Aşağıda, .Net SDK kullanarak bazı belge sorgularını çalıştırma adımları verilmiştir.
Bu örnekte, yeni eklediğimiz yeni oluşturulmuş belgeleri sorgulamak istiyoruz.
Step 1 - Sorguyu SelfLink ve sorgu metnine karşı çalıştırmak için koleksiyonu ileterek CreateDocumentQuery'yi çağırın.
private async static Task QueryDocumentsWithPaging(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Query Documents (paged results) ****");
Console.WriteLine();
Console.WriteLine("Quering for all documents");
var sql = "SELECT * FROM c";
var query = client.CreateDocumentQuery(collection.SelfLink, sql).AsDocumentQuery();
while (query.HasMoreResults) {
var documents = await query.ExecuteNextAsync();
foreach (var document in documents) {
Console.WriteLine(" Id: {0}; Name: {1};", document.id, document.name);
}
}
Console.WriteLine();
}
Bu sorgu aynı zamanda tüm koleksiyondaki tüm belgeleri de döndürüyor, ancak daha önce olduğu gibi CreateDocumentQuery'de .ToList'i çağırmıyoruz, bu da tüm sonuçları tek bir kod satırında aşağı çekmek için gereken sayıda istek gönderecektir.
Step 2 - Bunun yerine, AsDocumentQuery'yi çağırın ve bu yöntem HasMoreResults özelliğine sahip bir sorgu nesnesi döndürür.
Step 3 - HasMoreResults true ise, sonraki parçayı almak için ExecuteNextAsync'i çağırın ve ardından bu yığının tüm içeriğini dökümünü alın.
Step 4- Dilerseniz SQL yerine LINQ kullanarak da sorgulama yapabilirsiniz. Burada q içinde bir LINQ sorgusu tanımladık, ancak biz üzerinde .ToList çalıştırana kadar çalışmayacaktır.
private static void QueryDocumentsWithLinq(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Query Documents (LINQ) ****");
Console.WriteLine();
Console.WriteLine("Quering for US customers (LINQ)");
var q =
from d in client.CreateDocumentQuery<Customer>(collection.DocumentsLink)
where d.Address.CountryRegionName == " United States"
select new {
Id = d.Id,
Name = d.Name,
City = d.Address.Location.City
};
var documents = q.ToList();
Console.WriteLine("Found {0} UK customers", documents.Count);
foreach (var document in documents) {
var d = document as dynamic;
Console.WriteLine(" Id: {0}; Name: {1}; City: {2}", d.Id, d.Name, d.City);
}
Console.WriteLine();
}
SDK, LINQ sorgumuzu DocumentDB için SQL sözdizimine dönüştürecek ve LINQ sözdizimimize göre bir SELECT ve WHERE yan tümcesi oluşturacaktır.
Step 5 - Şimdi yukarıdaki sorguları CreateDocumentClient görevinden çağırın.
private static async Task CreateDocumentClient() {
// Create a new instance of the DocumentClient
using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
'myfirstdb'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First();
//await CreateDocuments(client);
await QueryDocumentsWithPaging(client);
QueryDocumentsWithLinq(client);
}
}
Yukarıdaki kod çalıştırıldığında, aşağıdaki çıktıyı alacaksınız.
**** Query Documents (paged results) ****
Quering for all documents
Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1;
Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1;
**** Query Documents (LINQ) ****
Quering for US customers (LINQ)
Found 2 UK customers
Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1; City: Brooklyn
Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1; City: Brooklyn