次の方法で共有


クイック スタート: Node.js 用の MongoDB ドライバーで Azure DocumentDB を使用する

このクイック スタートでは、Node.jsを使用して基本的な Azure DocumentDB アプリケーションを作成します。 Azure DocumentDB は、アプリケーションがドキュメントをクラウドに格納し、公式の MongoDB ドライバーを使用してアクセスできるようにする NoSQL データ ストアです。 このガイドでは、Node.jsを使用して Azure DocumentDB クラスターでドキュメントを作成し、基本的なタスクを実行する方法について説明します。

API リファレンス | ソース コード | パッケージ (npm)

[前提条件]

  • Azure サブスクリプション

    • Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください
  • Node.js 22 以降

Azure DocumentDB クラスターを作成する

最初に、NoSQL データを格納および管理するための基盤として機能する Azure DocumentDB クラスターを作成する必要があります。

  1. Azure portal にサインインします (https://portal.azure.com)。

  2. Azure portal のメニューまたは [ホーム] ページで、 [リソースの作成] を選択します。

  3. [ 新規 ] ページで、 Azure DocumentDB を検索して選択します。

    Azure DocumentDB の検索を示すスクリーンショット。

  4. [Azure DocumentDB クラスターの作成] ページと [基本] セクションで、[クラスター層] セクションで [構成] オプションを選択します。

    クラスターの構成オプションを示すスクリーンショット。

  5. [ スケール ] ページで、これらのオプションを構成し、[ 保存] を選択して変更をクラスター層に保持します。

    価値
    クラスター レベル M30 tier, 2 vCore, 8-GiB RAM
    シャードあたりのストレージ 128 GiB

    新しい Azure DocumentDB クラスターのコンピューティングとストレージの構成オプションのスクリーンショット。

  6. [基本] セクションに戻り、次のオプションを構成します。

    価値
    Subscription Azure サブスクリプションを選択する
    リソース グループ 新しいリソース グループを作成するか、既存のリソース グループを選択
    クラスター名 グローバルに一意の名前を指定
    場所 サブスクリプションでサポートされている Azure リージョンを選択
    MongoDB バージョン 8.0 を選択
    管理者ユーザー名 ユーザー管理者としてクラスターにアクセスするためのユーザー名を作成する
    パスワード ユーザー名に関連付けられている一意のパスワードを使用する

    クラスター パラメーターを示すスクリーンショット。

    ヒント

    ユーザー名とパスワードに使用する値を記録します。 これらの値は、このガイドの後半で使用します。 有効な値の詳細については、 クラスターの制限事項を参照してください。

  7. [次へ: ネットワーク] を選択します。

  8. [ネットワーク] タブの [ ファイアウォール規則 ] セクションで、次のオプション 構成します。

    価値
    接続方法 Public access
    Azure 内の Azure サービスとリソースからこのクラスターへのパブリック アクセスを許可する 有効
  9. [+ 現在のクライアント IP アドレスの追加] を選択して、クラスターへのアクセスを許可する現在のクライアント デバイスのファイアウォール規則を追加します。

    ネットワーク構成を示すスクリーンショット。

    ヒント

    多くの企業環境では、VPN やその他の企業ネットワーク設定により、開発者用コンピューターの IP アドレスが非表示になっています。 このような場合は、 0.0.0.0 - 255.255.255.255 IP アドレス範囲をファイアウォール規則として追加することで、すべての IP アドレスへのアクセスを一時的に許可できます。 このファイアウォール規則は、接続テストと開発の一環として一時的にのみ使用してください。

  10. [Review + create](レビュー + 作成) を選択します。

  11. 指定した設定を確認し、[作成] を選択します。 クラスターの作成には数分かかります。 リソースのデプロイが完了するまで待ちます。

  12. 最後に、[ リソースに移動 ] を選択して、ポータルで Azure DocumentDB クラスターに移動します。

goto リソース オプションを示すスクリーンショット。

クラスターの資格情報を取得する

クラスターへの接続に使用する資格情報を取得します。

  1. クラスター ページで、リソース メニューの [接続文字列 ] オプションを選択します。

  2. [ 接続文字列 ] セクションで、[ 接続文字列 ] フィールドの値をコピーまたは記録します。

接続文字列オプションを示すスクリーンショット。

Important

ポータルの接続文字列には、パスワードの値は含まれません。 <password> プレースホルダーは、クラスターの作成時に入力した資格情報に置き換えるか、対話形式でパスワードを入力する必要があります。

プロジェクトを初期化する

現在のディレクトリに新しい Node.js プロジェクトを作成します。

  1. 空のディレクトリから開始します。

  2. 現在のディレクトリでターミナルを開きます。

  3. Node.js プロジェクトを初期化します。

    npm init -y
    
  4. TypeScript をインストールし、TypeScript 構成を初期化します (TypeScript のサポートでは省略可能)。

    npm install -D typescript @types/node
    npx tsc --init
    

クライアント ライブラリをインストールする

クライアント ライブラリは、mongodb パッケージとして npm 経由で使用できます。

  1. npm を使用して MongoDB Node.js ドライバーをインストールします。

    npm install mongodb
    
  2. package.json ファイルを開いて確認し、パッケージ エントリが存在することを確認します。

  3. 必要なモジュールをアプリケーション コードにインポートします。

    import { MongoClient, Db, Collection, Document } from 'mongodb';
    
    const { MongoClient } = require('mongodb');
    

オブジェクト モデル

名前 Description
MongoClient MongoDB への接続に使用される型。
Db クラスター内のデータベースを表します。
Collection<Document> クラスター内のデータベース内のコレクションを表します。

コード例

このアプリケーションのコードは、 adventureworks という名前のデータベースと products という名前のコレクションに接続します。 products コレクションには、名前、カテゴリ、数量、一意の識別子、セールフラグなどの各製品の詳細が含まれています。 このコード サンプルでは、コレクションを操作するときに最も一般的な操作を実行します。

クライアントを認証する

まず、基本的な接続文字列を使用してクライアントに接続します。

  1. main 関数を作成し、接続文字列を設定します。 <your-cluster-name><your-username>、および<your-password>を実際のクラスター情報に置き換えます。

    async function main(): Promise<void> {
        // Connection string for Azure DocumentDB cluster
        const 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 a new client and connect to the server
        const client = new MongoClient(connectionString);
    
    async function main() {
        // Connection string for Azure DocumentDB cluster
        const 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 a new client and connect to the server
        const client = new MongoClient(connectionString);
    
  2. MongoDB クライアントに接続し、接続を確認します。

        try {
            // Connect to the MongoDB cluster
            await client.connect();
    
            // Ping the server to verify connection
            await client.db("admin").command({ ping: 1 });
            console.log("Successfully connected and pinged Azure DocumentDB");
    
        try {
            // Connect to the MongoDB cluster
            await client.connect();
    
            // Ping the server to verify connection
            await client.db("admin").command({ ping: 1 });
            console.log("Successfully connected and pinged Azure DocumentDB");
    

コレクションを取得する

次に、データベースとコレクションを取得します。 データベースとコレクションがまだ存在しない場合は、ドライバーを使用して自動的に作成します。

  1. データベースへの参照を取得します。

            // Get database reference
            const database: Db = client.db("adventureworks");
            console.log(`Connected to database: ${database.databaseName}`);
    
            // Get database reference
            const database = client.db("adventureworks");
            console.log(`Connected to database: ${database.databaseName}`);
    
  2. データベース内のコレクションへの参照を取得します。

            // Get collection reference
            const collection: Collection<Document> = database.collection("products");
            console.log("Connected to collection: products");
    
            // Get collection reference
            const collection = database.collection("products");
            console.log("Connected to collection: products");
    

ドキュメントの作成

次に、コレクション内に新しいドキュメントをいくつか作成します。 ドキュメントをアップサートし、同じ一意識別子を持つ既存のドキュメントがある場合、それを置き換えられるようにします。

  1. サンプル製品ドキュメントを作成します。

            // Create sample products
            interface Product {
                _id: string;
                name: string;
                category: string;
                quantity: number;
                price: number;
                sale: boolean;
            }
    
            const 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,
                }
            ];
    
            // Create sample products
            const products = [
                {
                    _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,
                }
            ];
    
  2. upsert 操作を使用してドキュメントを挿入します。

            // Insert documents with upsert
            for (const product of products) {
                const filter = { _id: product._id };
                const options = { upsert: true };
    
                await collection.replaceOne(filter, product, options);
                console.log(`Upserted product: ${product.name}`);
            }
    
            // Insert documents with upsert
            for (const product of products) {
                const filter = { _id: product._id };
                const options = { upsert: true };
    
                await collection.replaceOne(filter, product, options);
                console.log(`Upserted product: ${product.name}`);
            }
    

ドキュメントを取得する

次に、ポイント読み取り操作を実行して、コレクションから特定のドキュメントを取得します。

  1. ID で特定のドキュメントを検索するフィルターを定義します。

            // Retrieve a specific document by ID
            const filter = { _id: "00000000-0000-0000-0000-000000004018" };
    
            // Retrieve a specific document by ID
            const filter = { _id: "00000000-0000-0000-0000-000000004018" };
    
  2. クエリを実行し、結果を取得します。

            const retrievedProduct = await collection.findOne(filter);
    
            if (retrievedProduct) {
                console.log(`Retrieved product: ${retrievedProduct.name} - $${retrievedProduct.price}`);
            } else {
                console.log("Product not found");
            }
    
            const retrievedProduct = await collection.findOne(filter);
    
            if (retrievedProduct) {
                console.log(`Retrieved product: ${retrievedProduct.name} - $${retrievedProduct.price}`);
            } else {
                console.log("Product not found");
            }
    

ドキュメントにクエリを実行する

最後に、MongoDB クエリ言語 (MQL) を使用して複数のドキュメントに対してクエリを実行します。

  1. 特定の条件に一致するドキュメントを検索するクエリを定義します。

            // Query for products on sale
            const saleFilter = { sale: true };
            const saleProducts = await collection.find(saleFilter).toArray();
    
            // Query for products on sale
            const saleFilter = { sale: true };
            const saleProducts = await collection.find(saleFilter).toArray();
    
  2. 結果を反復処理して、一致するドキュメントを表示します。

            console.log("Products on sale:");
            for (const product of saleProducts) {
                console.log(`- ${product.name}: $${product.price.toFixed(2)} (Category: ${product.category})`);
            }
    
        } catch (error) {
            console.error("An error occurred:", error);
        } finally {
            await client.close();
        }
    }
    
    main().catch(console.error);
    
            console.log("Products on sale:");
            for (const product of saleProducts) {
                console.log(`- ${product.name}: $${product.price.toFixed(2)} (Category: ${product.category})`);
            }
    
        } catch (error) {
            console.error("An error occurred:", error);
        } finally {
            await client.close();
        }
    }
    
    main().catch(console.error);
    

Visual Studio Code を使用してデータを探索する

Visual Studio Code の DocumentDB 拡張機能を使用して、データのクエリ、挿入、更新、削除などの主要なデータベース操作を実行します。

  1. Visual Studio Code を開きます。

  2. [拡張機能] ビューに移動し、DocumentDBという用語を検索します。 VS Code 用 DocumentDB 拡張機能を見つけます。

  3. 拡張機能の [インストール ] ボタンを選択します。 インストールが完了するまで待ちます。 プロンプトが表示されたら、Visual Studio Code をリロードします。

  4. アクティビティ バーで対応するアイコンを選択して 、DocumentDB 拡張機能に移動します。

  5. [DocumentDB 接続] ウィンドウで、[ + 新しい接続...] を選択します。

  6. ダイアログで、[ サービスの検出 ] を選択し、[ Azure DocumentDB - Azure Service Discovery] を選択します。

  7. Azure サブスクリプションと、新しく作成した Azure DocumentDB クラスターを選択します。

    ヒント

    多くの企業環境では、VPN やその他の企業ネットワーク設定により、開発者用コンピューターの IP アドレスが非表示になっています。 このような場合は、 0.0.0.0 - 255.255.255.255 IP アドレス範囲をファイアウォール規則として追加することで、すべての IP アドレスへのアクセスを一時的に許可できます。 このファイアウォール規則は、接続テストと開発の一環として一時的にのみ使用してください。 詳細については、「ファイアウォールの 構成」を参照してください。

  8. DocumentDB 接続ペインに戻り、クラスターのノードを展開し、既存のドキュメントノードとコレクションノードに移動します。

  9. コレクションのコンテキスト メニューを開き、[ DocumentDB スクラップブック] > [新しい DocumentDB スクラップブック] を選択します。

  10. 次の MongoDB クエリ言語 (MQL) コマンドを入力し、[ すべて実行] を選択します。 コマンドからの出力を確認します。

    db.products.find({
      price: { $gt: 200 },
      sale: true
    })
    .sort({ price: -1 })
    .limit(3)
    

リソースをクリーンアップする

Azure DocumentDB クラスターの使用が完了したら、作成した Azure リソースを削除して、追加の料金が発生しないようにすることができます。

  1. Azure portal の検索バーで、「リソース グループ」を検索して選択します。

    リソース グループを検索するためのオプションを示すスクリーンショット。

  2. 一覧で、このクイック スタートで使用したリソース グループを選択します。

    リソース グループを示すスクリーンショット。

  3. [リソース グループ] ページで、[リソース グループ 削除] を選択します。

  4. 削除の確認ダイアログで、リソース グループの名前を入力して、削除することを確認します。 最後に、[削除] を選択して、リソース グループを完全に削除します。

    リソース グループの削除の確認ボタンを示すスクリーンショット。