Oracle Database API for MongoDBの使用

Oracle Database API for MongoDBでは、MongoDB言語ドライバおよびツールを使用してOracle Autonomous Databaseに接続できます。

Oracle Database API for MongoDBは、Autonomous Databaseのコンバージド・データベース機能を利用して、単一のデータベース内でJSONデータを含む複数のデータ型を管理します。たとえば、これらのコンバージド・データベース機能により、SQLを使用してJSONデータを問合せまたは更新できます。

ノート

MongoDBでは、ACLを使用するようにネットワーク・アクセスを構成するか、Autonomous Databaseインスタンスのプライベート・エンドポイントを定義する必要があります。

詳細は、Oracle Database API for MongoDBを参照してください。

詳細は、Autonomous JSON Databaseについてを参照してください。

詳細は、Autonomous Databaseワークロード・タイプについてを参照してください。

トピック

MongoDBのアクセスの構成およびMongoDBの有効化

Oracle Database API for MongoDBを使用すると、Oracle Autonomous Databaseをデータ・ストアとして使用できます。

MongoDB APIを使用するには、新しいAutonomous Databaseを作成および構成したり、既存のAutonomous Databaseの構成を変更できます。

ノート

MongoDBでは、ACLを使用するようにネットワーク・アクセスを構成するか、Autonomous Databaseインスタンスのプライベート・エンドポイントを定義する必要があります。ネットワーク・アクセスの構成に加えて、Autonomous DatabaseインスタンスでMongoDB APIを有効にする必要があります。

MongoDBのアクセスの構成

MongoDB APIを使用するには、ACLを構成するか、プライベート・エンドポイントを定義することで、新しいAutonomous Databaseを作成および構成したり、既存のAutonomous Databaseの構成を変更できます。

MongoDB用の新しいAutonomous Databaseの構成

ネットワーク・アクセス・タイプを選択する時点まで、Autonomous Databaseのプロビジョニングまたはクローニングのステップに従います。

adb_network_access_acl_provision.pngの説明が続きます

この時点で、Oracle Database API for MongoDBを使用するには、次のいずれかのネットワーク・アクセス・タイプを選択して構成することで、セキュア・アクセスを構成します。

MongoDB用の既存のAutonomous Databaseの構成

Autonomous DatabaseインスタンスのOracle Cloud Infrastructure Consoleを開きます。


adb_ajd_console_details.pngの説明が続きます

ノート

Oracle Database API for MongoDBを使用するには、ネットワークを構成する必要があり、アクセス・タイプ「指定したIPおよびVCNからのセキュア・アクセスを許可」または「Virtual Cloud Network」のいずれかである必要があります。

アクセス制御リスト(ACL)の設定

詳細は、既存のAutonomous Databaseインスタンスのアクセス制御リストの構成を参照してください。

IPアドレスのACLを構成するには、パブリックIPアドレスが必要です。パブリックIPアドレスを表示するには、いくつかの方法があります:
  • ネットワーク・アクセスの選択領域で、「自分のIPアドレスの追加」をクリックします。これにより、IPアドレスが「値」フィールドにコピーされます。

  • VPNを無効にした後、WhatIsMyIP Webサイトを使用します。
  • VPNを無効にした後、カール・コマンドcurl -s https://ifconfig.meを使用します。
ノート

パブリックIPアドレスが変更される場合があります。パブリックIPアドレスが変更されると、ACLの変更が必要になります。データベースにアクセスできない場合は、ACLを確認する必要があります。

ACLのタイプとユース・ケース

ACLタイプ 使用例 コメント
IPアドレス 同じパブリックIPアドレスを共有するローカル開発ノートパソコン 最も簡単に始めることができます。このLANに接続されているラップトップは、データベース資格証明を使用してデータベースにアクセスできます。
CIDRブロック ローカル開発ラップトップ IPv4/32表記法の使用
カンマ別IPアドレス 異なるLANに接続された少数のローカル開発ラップトップ(個別のパブリックIPアドレスを持つ) 10台以上のラップトップでは管理が面倒になる可能性があります。
CIDRブロック インターネットに公開されている同じサブネットに接続されたローカル開発ノートパソコン(各ノートパソコンには独自のパブリックIPアドレスがあります) CIDRブロック表記法を使用します。詳細は、こちらを参照してください。例: 89.84.109.0/24は、89.84.109.0から89.84.109.255までの256個の可能なIPアドレスを提供します
CIDRブロックを使用したVCN 独自のVCNおよびコンピュート・インスタンスを持つOCIでホストされるテスト、本番またはCI/CDパイプラインの場合 環境タイプごとにOCIコンパートメントを割り当てます。
IPアドレスとCIDRブロックを使用したVCNの混在 テスト環境またはCI/CDパイプラインからの接続を使用してテストAutonomous Databaseにアクセスするローカル開発ラップトップ 進行中の開発作業のための共通構成オプションです。

Autonomous DatabaseでのMongoDB APIの有効化

Autonomous Databaseインスタンスのネットワーク・アクセスを構成したら、MongDB APIを有効にします。

既存のインスタンスに対してMongoDB APIを有効にするには:

  1. Autonomous Databaseの詳細ページで、「ツール構成」タブを選択します。
  2. 「ツール構成の編集」をクリックします。
  3. MongoDB API行で、「ツールの有効化」列で「有効」を表示するように選択します。
  4. 「適用」をクリックします

「ライフサイクルの状態」は、MongoDBが有効になるまで更新に変更されます。

「拡張オプションの表示」を選択し、「ツール」タブを選択して、インスタンスをプロビジョニングまたはクローニングするときにMongoDB APIを有効にすることもできます。

詳細は、Autonomous Database組込みツールの管理を参照してください。

MongoDBのユーザー管理

Oracle Database API for MongoDBを使用すると、Oracle Autonomous Databaseをデータ・ストアとして使用できます。この目的のために既存のAutonomous Databaseを使用する必要がある場合、ワークフローは次のとおりです。

Oracle Database API for MongoDBでは、次のようにAutonomous DatabaseオブジェクトをMongoDBオブジェクトにマッピングできます:

MongoDBオブジェクト Oracle Autonomous Databaseオブジェクト
データベース スキーマ
コレクション
ドキュメント ドキュメント(列内)

たとえば、次のようにOracle Database API for MongoDBを使用してコレクションを作成できます:

  use scott;
  db.createCollection('fruit');

FRUITという名前の表がスキーマSCOTTに作成されます。

Oracle Database API for MongoDBに接続する場合、Autonomous Databaseのユーザー名とパスワードを使用して認証します。この認証済接続は、対応するスキーマ内のコレクションにアクセスします。このユーザーは、次の要件を満たす必要があります:

ノート

Autonomous DatabaseのロールDWROLEには、これらのロールなどが含まれます。

ユーザーに付与されていないスキーマへのアクセスは禁止されています。たとえば、ユーザーSCOTTは、スキーマSCOTT内のコレクションにのみアクセスできます。例外があります。認証ユーザーにAutonomous Database権限CREATE USERALTER USERおよびDROP USERがある場合、そのユーザーは任意のORDS対応スキーマにアクセスできます。

また、これらの権限を持つユーザーは、暗黙的にスキーマを作成できます。つまり、存在しないデータベースにユーザーがコレクションを作成すると、スキーマが自動的に作成されます。詳細は、Oracle Database API for MongoDBを参照してください。

MongoDBのテストAutonomous Databaseユーザーの作成

次のステップでは、データベース・アクションを使用して、適切なロールを持つテスト・ユーザーを作成します。データベース・アクションSQLまたはその他のSQLコマンドライン・ユーティリティを使用して、SQL文を直接実行することもできます。詳細は、Autonomous Databaseでのユーザーの作成- クライアント・ツールを使用した接続ツールを参照してください。
  1. Autonomous DatabaseのOracle Cloud Infrastructure Consoleを開きます。
  2. 「データベース・アクション」を選択します。
  3. データベース・アクション起動パッドから、「管理」「データベース・ユーザー」を選択します。
  4. 「データベース・ユーザー」ページで「+ユーザーの作成」を選択します。
  5. テスト・ユーザーの「ユーザー名」および「パスワード」を入力します。「Webアクセス」を選択し、「DATA表領域の割当て制限」を設定します。
    database_actions_create_user_for_mongodb_use.pngの説明が続きます
  6. 「付与されたロール」タブを選択します。
  7. デフォルトのロールに加えて、ユーザーのSODA_APPロールを選択して追加します。
    database_actions_grant_roles_for_mongodb_use.pngの説明が続きます
  8. 「ユーザーの作成」ボタンを選択します。
テスト目的で、このユーザーまたは同様に認証されたユーザーを使用できます。詳細は、コマンドラインを使用した接続のテストを参照してください。

Autonomous DatabaseへのMongoDBアプリケーションの接続

MongoDBアプリケーションをAutonomous Databaseに接続する場合、要件に応じていくつかのステップが含まれます。

Autonomous Database MongoDB接続文字列の取得

MongoDB API接続文字列は、Oracle Cloud Infrastructure Consoleから取得できます。

MongoDB API接続文字列を取得したら、コマンドライン・ユーティリティであるMongoDBシェルを使用して、データを接続して問い合せることができます。

まず、ネットワーク・アクセスを構成し、MongoDB APIを有効にする必要があります。詳細は、MongoDBのアクセスの構成を参照してください。

MongoDB API接続文字列を取得するには:

  1. Autonomous Databaseの詳細ページで、「ツール構成」タブを選択します。
  2. MongoDB API行の「アクセスURL」で、「コピー」をクリックします。
adb_tools_mongo_connect_string.pngの説明が続きます
データベース・アクションからのAutonomous Database接続文字列の取得

データの接続と問合せに使用するコマンドライン・ユーティリティであるMongoDBシェルを使用します。
  1. データベース・アクションを使用して、Autonomous Databaseインスタンスの接続文字列を取得できます。
  2. データベース・アクション起動パッドの「関連サービス」で、「Oracle Database API for MongoDB」をクリックします。
  3. 「Oracle Database API for MongoDB」ページで、「コピー」をクリックします。

コマンドラインを使用した接続のテスト

  1. テスト・ユーザーとしてログインします。詳細は、MongoDBのテストAutonomous Databaseユーザーの作成を参照してください。
    $ mongosh --tls --tlsAllowInvalidCertificates 'mongodb://TESTUSER:<PASSWORD>@<database URL>.
    <OCI region>.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&loadBalanced=false'
    Current Mongosh Log ID: 614c9e2a01e3575c8c0b2ec7
    Connecting to:         mongodb://TESTUSER:<PASSWORD>@<database URL>.<OCIregion>.oraclecloudapps.com:27017/admin?
    authMechanism=PLAIN&authSource=$external&tls=true&loadBalanced=false
    Using MongoDB:                   3.6.2
    Using Mongosh:                   1.0.7
    For mongosh info see: https://docs.mongodb.com/mongodb-shell/admin
    > show dbs
    testuser    0 B
    > 
    ノート

    接続文字列URIの任意の予約文字(特に、ユーザー名とパスワードの文字)を置換するには、URIパーセント・エンコーディングを使用します。予約文字とそのパーセント・エンコーディングは次のとおりです:

    ! # $ % & ' ( ) * +
    %21 %23 %24 %25 %26 %27 %28 %29 %2A %2B
    , / : ; = ? @ [ ]
    %2C %2F %3A %3B %3D %3F %40 %5B %5D

    たとえば、ユーザー名がRUTHで、パスワードが@least1/2#?の場合、サーバー<server>へのMongoDB接続文字列は次のようになります:

    'mongodb://RUTH:%40least1%2F2%23%3F@<server>:27017/ruth/ ...'

    使用するツールまたはドライバによっては、URI接続文字列の一部としてではなく、個別のパラメータとしてユーザー名とパスワードを指定できる場合があります。その場合、含まれている予約文字をエンコードする必要はありません。

    関連項目:

  2. コレクションを作成し、ドキュメントをコレクションに挿入します。
    testuser> show collections
    
    testuser> db.createCollection( 'fruit' )
    { ok: 1 }
    testuser> show collections
    fruit
    testuser> db.fruit.insertOne( {name:"orange", count:42} )
    {
      acknowledged: true,
      insertedId: ObjectId("614ca31fdab254f63e4c6b47")
    }
    testuser> db.fruit.insertOne( {name:"apple", count:12, color: "red"} )
    {
      acknowledged: true,
      insertedId: ObjectId("614ca340dab254f63e4c6b48")
    }
    testuser> db.fruit.insertOne( {name:"pear", count:5} )
    {
      acknowledged: true,
      insertedId: ObjectId("614ca351dab254f63e4c6b49")
    }
    testuser>
  3. データベース・アクションなどのSQLクライアントを使用してコレクションを問い合せます。
    SELECT
         f.json_document.name, 
         f.json_document.count, 
         f.json_document.color
    FROM fruit f;
    database_actions_sql_for_mongodb_use.pngの説明が続きます

Node.jsアプリケーションを使用した接続のテスト

  1. Node.jsをダウンロードします。ご使用の環境にNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。
    $ wget https://nodejs.org/dist/latest-v14.x/node-v14.17.5-linux-x64.tar.xz
  2. Node、jsアーカイブの内容を抽出します。ご使用の環境にNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。
    $ tar -xf node-v14.17.5-linux-x64.tar.xz
  3. PATH環境変数を設定します。ご使用の環境にNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。
    $ export PATH="`pwd`"/node-v14.17.5-linux-x64/bin:$PATH
  4. Javascriptの例を使用して接続をテストします。
    1. 新規ディレクトリを作成
      $ mkdir autonomous_mongodb
      $ cd autonomous_mongodb
      $ npm init –y
    2. mongodb依存関係をインストールします。
      $ npm install mongodb
    3. connect.jsという名前のJavaScriptアプリケーションを作成します。
      const { MongoClient } = require("mongodb");
      const uri =
         "mongodb://TESTUSER:<PASSWORD>@<Database URI>.<OCI region>.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&loadBalanced=false";
      
      const client = new MongoClient(uri);
      
      async function run() {
        try {
              await client.connect();
      
              const database = client.db('admin');
              const movies = database.collection('movies');
      
              // Insert a movie
              const doc = { title: 'Back to the Future', 
                            year: 1985, genres: ['Adventure', 'Comedy', 'Sci-Fi'] }
              const result = await movies.insertOne(doc);
      
              // Query for a movie that has the title 'Back to the Future' :)
              const query = { title: 'Back to the Future' };
              const movie = await movies.findOne(query);
      
              console.log(movie);
        } finally {
           // Ensures that the client will close when you finish/error
           await client.close();
        }
      }
      run().catch(console.dir);
      
      ノート

      接続文字列URIの任意の予約文字(特に、ユーザー名とパスワードの文字)を置換するには、URIパーセント・エンコーディングを使用します。予約文字とそのパーセント・エンコーディングは次のとおりです:

      ! # $ % & ' ( ) * +
      %21 %23 %24 %25 %26 %27 %28 %29 %2A %2B
      , / : ; = ? @ [ ]
      %2C %2F %3A %3B %3D %3F %40 %5B %5D

      たとえば、ユーザー名がRUTHで、パスワードが@least1/2#?の場合、サーバー<server>へのMongoDB接続文字列は次のようになります:

      'mongodb://RUTH:%40least1%2F2%23%3F@<server>:27017/ruth/ ...'

      使用するツールまたはドライバによっては、URI接続文字列の一部としてではなく、個別のパラメータとしてユーザー名とパスワードを指定できる場合があります。その場合、含まれている予約文字をエンコードする必要はありません。

      参照:

    4. サンプルを実行次のように出力されます。
      $ node connect
      {
        _id: new ObjectId("611e3266005202371acf27c1"),
        title: 'Back to the Future',
        year: 1985,
        genres: [ 'Adventure', 'Comedy', 'Sci-Fi' ]
      }