DocumentDB教程
DocumentDB SQL

DocumentDB 查询文档

在 DocumentDB 中,我们实际上使用 SQL 来查询文档,所以本章都是关于使用 DocumentDB 中的特殊 SQL 语法进行查询。尽管如果您正在进行 .NET 开发,也可以使用 LINQ 提供程序,它可以从 LINQ 查询生成适当的 SQL。

使用Portal查询文档

Azure 门户有一个查询资源管理器,可让您对 DocumentDB 数据库运行任何 SQL 查询。
我们将使用查询资源管理器来演示查询语言的许多不同功能和特性,从最简单的查询开始。
步骤 1-在数据库刀片中,单击以打开查询浏览器刀片。
查询资源管理器刀片
请记住,查询在集合范围内运行,因此查询资源管理器允许您在此下拉列表中选择集合。
运行查询
第 2 步-选择之前使用门户创建的家庭集合。
查询资源管理器打开这个简单的查询 SELECT * FROM c,它只是从集合中检索所有文档。
步骤 3-通过单击"运行查询"按钮执行此查询。然后您将看到在"结果"刀片中检索了完整的文档。
结果刀片中的文档

使用 .Net SDK 查询文档

以下是使用 .Net SDK 运行一些文档查询的步骤。
在这个例子中,我们要查询刚刚添加的新创建的文档。
步骤 1-调用 CreateDocumentQuery,传入集合以通过其 SelfLink 和查询文本运行查询。
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(); 
} 
这个查询也会返回整个集合中的所有文档,但我们不像以前那样在 CreateDocumentQuery 上调用 .ToList,它会根据需要发出尽可能多的请求,以在一行代码中提取所有结果。
第 2 步-相反,调用 AsDocumentQuery 并且此方法返回一个具有 HasMoreResults 属性的查询对象。
步骤 3-如果 HasMoreResults 为真,则调用 ExecuteNextAsync 以获取下一个块,然后转储该块的所有内容。
步骤 4-如果您愿意,也可以使用 LINQ 而不是 SQL 进行查询。在这里,我们在 q 中定义了一个 LINQ 查询,但在我们对其运行 .ToList 之前它不会执行。
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 查询转换为 DocumentDB 的 SQL 语法,根据我们的 LINQ 语法生成 SELECT 和 WHERE 子句
步骤 5-现在从 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); 
   } 
  
}
执行上述代码后,您将收到以下输出。
**** 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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4