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

MongoDBの新しいAutonomous Databaseの構成

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

adb_network_access_acl_provision.pngの説明が続きます
図adb_network_access_acl_provision.pngの説明

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

MongoDBの既存のAutonomous Databaseの構成

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



ノート

Oracle Database API for MongoDBを使用するには、ネットワークを構成し、アクセス・タイプ許可されたIPおよびVCNsからのセキュア・アクセスのみまたはプライベート・エンドポイント・アクセスのみのいずれかである必要があります。

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

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

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

  • VPNを無効にしたら、WhatIsMyIP Webサイトを使用します。
  • VPNを無効にしたら、curlコマンド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アドレスおよびVCNとCIDRブロックの混合 テスト環境または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のコレクションにのみアクセスできます。例外が1つあります。認証済ユーザーにAutonomous Database権限CREATE USERALTER USERおよびDROP USERがある場合、そのユーザーは任意のORDS対応スキーマにアクセスできます。

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

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

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

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

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」で、「コピー」をクリックします。
データベース・アクションからの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の説明が続きます
    図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' ]
      }