Documentdb-query-document

提供:Dev Guides
移動先:案内検索

DocumentDB-クエリドキュメント

DocumentDBでは、実際にSQLを使用してドキュメントを照会するため、この章では、DocumentDBの特別なSQL構文を使用した照会について説明します。 .NET開発を行っている場合は、使用でき、LINQクエリから適切なSQLを生成できるLINQプロバイダーもあります。

ポータルを使用したドキュメントのクエリ

Azureポータルには、DocumentDBデータベースに対してSQLクエリを実行できるクエリエクスプローラーがあります。

クエリエクスプローラーを使用して、可能な限り単純なクエリから始めて、クエリ言語のさまざまな機能を紹介します。

  • ステップ1 *-データベースブレードで、クリックしてQuery Explorerブレードを開きます。

クエリエクスプローラーブレード

クエリはコレクションのスコープ内で実行されるため、クエリエクスプローラーでは、このドロップダウンでコレクションを選択できます。

クエリの実行

  • ステップ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を呼び出していません。これにより、1行のコードですべての結果を取得するために必要な数のリクエストが発行されます。

  • ステップ2 *-代わりに、AsDocumentQueryを呼び出すと、このメソッドはHasMoreResultsプロパティを持つクエリオブジェクトを返します。
  • ステップ3 *-HasMoreResultsがtrueの場合、ExecuteNextAsyncを呼び出して次のチャンクを取得し、そのチャンクのすべての内容をダンプします。
  • ステップ4 *-必要に応じて、SQLの代わりにLINQを使用してクエリすることもできます。 ここでは、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