C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 > Azure > Cosmos DB >
SQL API でアイテムをSQLでクエリする
2021/7/4
この記事は Azure Cosmos DB SQL API を対象にしています。
クイックスタート - Azure Cosmos DB SQL API リソースを管理する .NET コンソール アプリを構築する | Microsoft Docs
- この記事の内容は Microsoft.Azure.Cosmos パッケージ バージョン 3.19.0 で確認しています。
- この記事の内容は 容量モード サーバーレス で確認しています。(記事執筆時点ではプレビュー機能です。)
Name = "徳川家康" のアイテムをすべて取得して、クラスにマッピングする
この例では、name = "徳川家康" に合致するすべてのアイテムを Person クラスにマッピングして取得します。Personクラスの定義は後述します。
前提
- Azure Cosmos DB のコア(SQL)のアカウントに、MySampleDBデータベースとMySampleContainerコンテナがある。
- NuGet で Microsoft.Azure.Cosmos パッケージをインストールしている。→ NuGetの使用方法
- using Microsoft.Azure.Cosmos; がソースコードの冒頭付近に記載されている。
メモ:接続文字列の確認方法
//▼Cosmos DBに接続
//接続文字列は環境に応じて指定してください。
string connectionString = "AccountEndpoint=https://mycosmosaccount.azure.com:443/;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;";
CosmosClient cosmosClient = new CosmosClient(connectionString);
//▼コンテナへの参照を取得
Database database = cosmosClient.GetDatabase("MySampleDB");
Container container = database.GetContainer("MySampleContainer");
//▼クエリを実行して Name = '徳川家康' のアイテムをすべて取得
string sql = "SELECT * FROM c WHERE c.Name = '徳川家康'";
QueryDefinition query = new QueryDefinition(sql);
var itor = container.GetItemQueryIterator<Person>(query);
//▼結果
while (itor.HasMoreResults)
{
var results = itor.ReadNextAsync().GetAwaiter().GetResult();
foreach (Person p in results)
{
System.Diagnostics.Debug.WriteLine($"{p.id} {p.Name} {p.Age}");
}
}
この例で使用している Person クラス は次の通りです。
Person クラス
public class Person
{
//id は必須プロパティです。
public string id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Name = "徳川家康" のアイテムをすべてJSON形式で取得する
この例では、name = "徳川家康" に合致するすべてのアイテムをJSON形式で取得します。マッピング用のクラスは不要です。
前提
- Azure Cosmos DB のコア(SQL)のアカウントに、MySampleDBデータベースとMySampleContainerコンテナがある。
- NuGet で Microsoft.Azure.Cosmos パッケージをインストールしている。→ NuGetの使用方法
- using Microsoft.Azure.Cosmos; がソースコードの冒頭付近に記載されている。
- .NET Frameworkを使用する場合、NuGet で System.Text.Json をインストールしている。
メモ:接続文字列の確認方法
//▼Cosmos DBに接続
//接続文字列は環境に応じて指定してください。
string connectionString = "AccountEndpoint=https://mycosmosaccount.azure.com:443/;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;";
CosmosClient cosmosClient = new CosmosClient(connectionString);
//▼コンテナへの参照を取得
Database database = cosmosClient.GetDatabase("MySampleDB");
Container container = database.GetContainer("MySampleContainer");
//▼クエリを実行して Name = '徳川家康' のアイテムをすべて取得
string sql = "SELECT * FROM c WHERE c.Name = '徳川家康'";
var itor = container.GetItemQueryStreamIterator(sql);
//▼結果
while (itor.HasMoreResults)
{
var results = itor.ReadNextAsync().GetAwaiter().GetResult();
using System.IO.StreamReader reader = new System.IO.StreamReader(results.Content);
{
//結果は JSON で取得できます。このJSONにはメタ情報も含まれています。
string jsonText = reader.ReadToEnd();
//System.Text.Jsonを使ってJSONの構造にアクセスします。
using (var document = System.Text.Json.JsonDocument.Parse(jsonText))
{
//アイテムは Documents という名前のJSON配列に入っています。
var items = document.RootElement.GetProperty("Documents");
//アイテムのJSON配列を列挙して、アイテムの値を取り出します。
foreach(var person in items.EnumerateArray())
{
string id = person.GetProperty("id").GetString();
string Name = person.GetProperty("Name").GetString();
int Age = person.GetProperty("Age").GetInt32();
System.Diagnostics.Debug.WriteLine($"{id} {Name} {Age}");
} //foreach
} //using document
} //using reader
} //while itor