Oracle Database API for MongoDBの使用

Oracle Database API for MongoDB makes it possible to connect to Oracle Autonomous Database using MongoDB language drivers and tools.

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

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

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

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

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

Oracle Database API for MongoDB enables you to use an Oracle Autonomous Database as the data store.

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

MongoDBのアクセスの構成

MongoDB APIを使用するには、新しいAutonomous Databaseを作成および構成するか、ACLを構成するか、プライベート・エンドポイントを定義することで、既存の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コンソールを開きます。


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 enables you to use an Oracle Autonomous Database as the data store.この目的のために既存の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コンソールから取得できます。

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. On the Oracle Database API for MongoDB page click Copy.

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

  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' ]
      }