このクイック スタートでは、Go を使用して基本的な Azure DocumentDB アプリケーションを作成します。 Azure DocumentDB は、アプリケーションがドキュメントをクラウドに格納し、公式の MongoDB ドライバーを使用してアクセスできるようにする NoSQL データ ストアです。 このガイドでは、Go を使用して Azure DocumentDB クラスターでドキュメントを作成し、基本的なタスクを実行する方法について説明します。
API リファレンス | ソース コード | パッケージ (Go)
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください
- Golang 1.18 以降
Azure DocumentDB クラスターを作成する
最初に、NoSQL データを格納および管理するための基盤として機能する Azure DocumentDB クラスターを作成する必要があります。
Azure portal にサインインします (https://portal.azure.com)。
Azure portal のメニューまたは [ホーム] ページで、 [リソースの作成] を選択します。
[ 新規 ] ページで、 Azure DocumentDB を検索して選択します。
[Azure DocumentDB クラスターの作成] ページと [基本] セクションで、[クラスター層] セクションで [構成] オプションを選択します。
[ スケール ] ページで、これらのオプションを構成し、[ 保存] を選択して変更をクラスター層に保持します。
価値 クラスター レベル M30 tier, 2 vCore, 8-GiB RAMシャードあたりのストレージ 128 GiB
[基本] セクションに戻り、次のオプションを構成します。
価値 Subscription Azure サブスクリプションを選択する リソース グループ 新しいリソース グループを作成するか、既存のリソース グループを選択 クラスター名 グローバルに一意の名前を指定 場所 サブスクリプションでサポートされている Azure リージョンを選択 MongoDB バージョン 8.0を選択管理者ユーザー名 ユーザー管理者としてクラスターにアクセスするためのユーザー名を作成する パスワード ユーザー名に関連付けられている一意のパスワードを使用する
ヒント
ユーザー名とパスワードに使用する値を記録します。 これらの値は、このガイドの後半で使用します。 有効な値の詳細については、 クラスターの制限事項を参照してください。
[次へ: ネットワーク] を選択します。
[ネットワーク] タブの [ ファイアウォール規則 ] セクションで、次のオプション を 構成します。
価値 接続方法 Public accessAzure 内の Azure サービスとリソースからこのクラスターへのパブリック アクセスを許可する 有効 [+ 現在のクライアント IP アドレスの追加] を選択して、クラスターへのアクセスを許可する現在のクライアント デバイスのファイアウォール規則を追加します。
ヒント
多くの企業環境では、VPN やその他の企業ネットワーク設定により、開発者用コンピューターの IP アドレスが非表示になっています。 このような場合は、
0.0.0.0-255.255.255.255IP アドレス範囲をファイアウォール規則として追加することで、すべての IP アドレスへのアクセスを一時的に許可できます。 このファイアウォール規則は、接続テストと開発の一環として一時的にのみ使用してください。[Review + create](レビュー + 作成) を選択します。
指定した設定を確認し、[作成] を選択します。 クラスターの作成には数分かかります。 リソースのデプロイが完了するまで待ちます。
最後に、[ リソースに移動 ] を選択して、ポータルで Azure DocumentDB クラスターに移動します。
クラスターの資格情報を取得する
クラスターへの接続に使用する資格情報を取得します。
クラスター ページで、リソース メニューの [接続文字列 ] オプションを選択します。
[ 接続文字列 ] セクションで、[ 接続文字列 ] フィールドの値をコピーまたは記録します。
Important
ポータルの接続文字列には、パスワードの値は含まれません。
<password> プレースホルダーは、クラスターの作成時に入力した資格情報に置き換えるか、対話形式でパスワードを入力する必要があります。
プロジェクトを初期化する
現在のディレクトリに新しい Go モジュールを作成します。
空のディレクトリから開始します。
現在のディレクトリでターミナルを開きます。
新しい Go モジュールを初期化します。
go mod init azure-documentdb-go-quickstart
クライアント ライブラリをインストールする
クライアント ライブラリは、 go.mongodb.org/mongo-driver/v2/mongo モジュールとして Go を介して使用できます。
go getを使用して MongoDB Go ドライバーをインストールします。go get go.mongodb.org/mongo-driver/v2/mongoアプリケーション コードの
main.goという名前の新しい Go ファイルを作成します。必要なパッケージをアプリケーション コードにインポートします。
import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" )
オブジェクト モデル
| 名前 | Description |
|---|---|
mongo.Client |
MongoDB への接続に使用される型。 |
mongo.Database |
クラスター内のデータベースを表します。 |
mongo.Collection |
クラスター内のデータベース内のコレクションを表します。 |
コード例
このアプリケーションのコードは、 adventureworks という名前のデータベースと products という名前のコレクションに接続します。
products コレクションには、名前、カテゴリ、数量、一意の識別子、セールフラグなどの各製品の詳細が含まれています。 このコード サンプルでは、コレクションを操作するときに最も一般的な操作を実行します。
クライアントを認証する
まず、基本的な接続文字列を使用してクライアントに接続します。
main 関数を作成し、接続文字列を設定します。
<your-cluster-name>、<your-username>、および<your-password>を実際のクラスター情報に置き換えます。func main() { // Connection string for Azure DocumentDB cluster connectionString := "mongodb+srv://<your-username>:<your-password>@<your-cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000" // Create client options clientOptions := options.Client().ApplyURI(connectionString)MongoDB クライアントに接続し、接続を確認します。
// Create a new client and connect to the server ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, clientOptions) if err != nil { log.Fatal(err) } defer client.Disconnect(ctx) // Ping the primary err = client.Ping(ctx, nil) if err != nil { log.Fatal(err) } fmt.Println("Successfully connected and pinged Azure DocumentDB")
コレクションを取得する
次に、データベースとコレクションを取得します。 データベースとコレクションがまだ存在しない場合は、ドライバーを使用して自動的に作成します。
データベースへの参照を取得します。
// Get database reference database := client.Database("adventureworks") fmt.Println("Connected to database:", database.Name())データベース内のコレクションへの参照を取得します。
// Get collection reference collection := database.Collection("products") fmt.Println("Connected to collection:", collection.Name())
ドキュメントの作成
次に、コレクション内に新しいドキュメントをいくつか作成します。 ドキュメントをアップサートし、同じ一意識別子を持つ既存のドキュメントがある場合、それを置き換えられるようにします。
製品の種類を定義し、サンプル製品ドキュメントを作成します。
type Product struct { ID string `bson:"_id,omitempty"` Name string `bson:"name"` Category string `bson:"category"` Quantity int `bson:"quantity"` Price float64 `bson:"price"` Sale bool `bson:"sale"` } // Create sample products products := []Product{ { ID: "00000000-0000-0000-0000-000000004018", Name: "Windry Mittens", Category: "apparel-accessories-gloves-and-mittens", Quantity: 121, Price: 35.00, Sale: false, }, { ID: "00000000-0000-0000-0000-000000004318", Name: "Niborio Tent", Category: "gear-camp-tents", Quantity: 140, Price: 420.00, Sale: true, }, }upsert 操作を使用してドキュメントを挿入します。
// Insert documents with upsert for _, product := range products { filter := bson.M{"_id": product.ID} update := bson.M{"$set": product} opts := options.Update().SetUpsert(true) result, err := collection.UpdateOne(ctx, filter, update, opts) if err != nil { log.Fatal(err) } if result.UpsertedID != nil { fmt.Printf("Inserted document with ID: %v\n", result.UpsertedID) } else { fmt.Printf("Updated document with ID: %s\n", product.ID) } }
ドキュメントを取得する
次に、ポイント読み取り操作を実行して、コレクションから特定のドキュメントを取得します。
ID で特定のドキュメントを検索するフィルターを定義します。
// Retrieve a specific document by ID filter := bson.M{"_id": "00000000-0000-0000-0000-000000004018"} var retrievedProduct Productクエリを実行し、結果をデコードします。
err = collection.FindOne(ctx, filter).Decode(&retrievedProduct) if err != nil { log.Fatal(err) } fmt.Printf("Retrieved product: %+v\n", retrievedProduct)
ドキュメントにクエリを実行する
最後に、MongoDB クエリ言語 (MQL) を使用して複数のドキュメントに対してクエリを実行します。
特定の条件に一致するドキュメントを検索するクエリを定義します。
// Query for products on sale queryFilter := bson.M{"sale": true} cursor, err := collection.Find(ctx, queryFilter) if err != nil { log.Fatal(err) } defer cursor.Close(ctx)カーソルをイテレーションして、一致するすべてのドキュメントを取得します。
fmt.Println("Products on sale:") for cursor.Next(ctx) { var product Product if err := cursor.Decode(&product); err != nil { log.Fatal(err) } fmt.Printf("- %s: $%.2f (Category: %s)\n", product.Name, product.Price, product.Category) } if err := cursor.Err(); err != nil { log.Fatal(err) } }
Visual Studio Code を使用してデータを探索する
Visual Studio Code の DocumentDB 拡張機能を使用して、データのクエリ、挿入、更新、削除などの主要なデータベース操作を実行します。
Visual Studio Code を開きます。
[拡張機能] ビューに移動し、
DocumentDBという用語を検索します。 VS Code 用 DocumentDB 拡張機能を見つけます。拡張機能の [インストール ] ボタンを選択します。 インストールが完了するまで待ちます。 プロンプトが表示されたら、Visual Studio Code をリロードします。
アクティビティ バーで対応するアイコンを選択して 、DocumentDB 拡張機能に移動します。
[DocumentDB 接続] ウィンドウで、[ + 新しい接続...] を選択します。
ダイアログで、[ サービスの検出 ] を選択し、[ Azure DocumentDB - Azure Service Discovery] を選択します。
Azure サブスクリプションと、新しく作成した Azure DocumentDB クラスターを選択します。
ヒント
多くの企業環境では、VPN やその他の企業ネットワーク設定により、開発者用コンピューターの IP アドレスが非表示になっています。 このような場合は、
0.0.0.0-255.255.255.255IP アドレス範囲をファイアウォール規則として追加することで、すべての IP アドレスへのアクセスを一時的に許可できます。 このファイアウォール規則は、接続テストと開発の一環として一時的にのみ使用してください。 詳細については、「ファイアウォールの 構成」を参照してください。DocumentDB 接続ペインに戻り、クラスターのノードを展開し、既存のドキュメントノードとコレクションノードに移動します。
コレクションのコンテキスト メニューを開き、[ DocumentDB スクラップブック] > [新しい DocumentDB スクラップブック] を選択します。
次の MongoDB クエリ言語 (MQL) コマンドを入力し、[ すべて実行] を選択します。 コマンドからの出力を確認します。
db.products.find({ price: { $gt: 200 }, sale: true }) .sort({ price: -1 }) .limit(3)
リソースをクリーンアップする
Azure DocumentDB クラスターの使用が完了したら、作成した Azure リソースを削除して、追加の料金が発生しないようにすることができます。
Azure portal の検索バーで、「リソース グループ」を検索して選択します。
一覧で、このクイック スタートで使用したリソース グループを選択します。
[リソース グループ] ページで、[リソース グループ 削除] を選択します。
削除の確認ダイアログで、リソース グループの名前を入力して、削除することを確認します。 最後に、[削除] を選択して、リソース グループを完全に削除します。