DocumentDB - Dokumen Kueri

Di DocumentDB, kami benar-benar menggunakan SQL untuk melakukan kueri dokumen, jadi bab ini adalah tentang kueri menggunakan sintaks SQL khusus di DocumentDB. Meskipun jika Anda melakukan pengembangan .NET, ada juga penyedia LINQ yang dapat digunakan dan yang dapat menghasilkan SQL yang sesuai dari kueri LINQ.

Membuat Kueri Dokumen menggunakan Portal

Portal Azure memiliki Penjelajah Kueri yang memungkinkan Anda menjalankan kueri SQL apa pun terhadap database DocumentDB Anda.

Kami akan menggunakan Penjelajah Kueri untuk mendemonstrasikan berbagai kemampuan dan fitur bahasa kueri yang dimulai dengan kueri sesederhana mungkin.

Step 1 - Dalam bilah database, klik untuk membuka bilah Penjelajah Kueri.

Ingatlah bahwa kueri berjalan dalam lingkup koleksi, sehingga Penjelajah Kueri memungkinkan Anda memilih koleksi di tarik-turun ini.

Step 2 - Pilih koleksi Keluarga yang dibuat sebelumnya menggunakan portal.

Query Explorer terbuka dengan query sederhana ini SELECT * FROM c, yang hanya mengambil semua dokumen dari koleksi.

Step 3- Jalankan kueri ini dengan mengklik tombol 'Jalankan kueri'. Kemudian Anda akan melihat bahwa dokumen lengkap diambil di bilah Hasil.

Membuat Kueri Dokumen menggunakan .Net SDK

Berikut adalah langkah-langkah untuk menjalankan beberapa query dokumen menggunakan .Net SDK.

Dalam contoh ini, kami ingin menanyakan dokumen yang baru dibuat yang baru saja kami tambahkan.

Step 1 - Panggil CreateDocumentQuery, meneruskan koleksi untuk menjalankan kueri dengan SelfLink dan teks kueri.

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

Kueri ini juga mengembalikan semua dokumen di seluruh koleksi, tetapi kami tidak memanggil .ToList di CreateDocumentQuery seperti sebelumnya, yang akan mengeluarkan permintaan sebanyak yang diperlukan untuk menarik semua hasil dalam satu baris kode.

Step 2 - Sebaliknya, panggil AsDocumentQuery dan metode ini mengembalikan objek kueri dengan properti HasMoreResults.

Step 3 - Jika HasMoreResults benar, panggil ExecuteNextAsync untuk mendapatkan potongan berikutnya dan kemudian buang semua konten potongan itu.

Step 4- Anda juga dapat melakukan kueri menggunakan LINQ daripada SQL jika Anda mau. Di sini kita telah mendefinisikan kueri LINQ di q, tetapi tidak akan dijalankan sampai kita menjalankan .ToList di atasnya.

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 akan mengubah kueri LINQ kami menjadi sintaks SQL untuk DocumentDB, menghasilkan klausa SELECT dan WHERE berdasarkan sintaks LINQ kami

Step 5 - Sekarang panggil kueri di atas dari tugas CreateDocumentClient.

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

Ketika kode di atas dijalankan, Anda akan menerima output berikut.

**** 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