機械翻訳について

Oracle Autonomous Database on Dedicated Exadata InfrastructureでのMongoDB APIの使用

Oracle Database API for MongoDBは、MongoDBワイヤ・プロトコルをOracle Databaseによって実行されるSQL文に変換します。 MongoDBスキル・セットを持つ開発者は、MongoDBプロトコルを理解するドライバおよびツールを使用するOracle Database用のJSONドキュメント・ストア・アプリケーションを記述できます。 このAPIの詳細な概要は、「MongoDBのOracle Database API」「MongoDBのOracle Database APIの概要」を参照してください。

MongoDB APIの有効化

Autonomous DatabaseのMongoDB APIは、OCIコンソールから有効にするか、Oracle REST Data Services (ORDS)を使用して手動で有効にできます。

MongoDB APIをAutonomous Databaseとともに使用するには、顧客管理Oracle REST Data Services (ORDS)を個別にインストールおよび構成する必要があり、ORDSのバージョンは22.3以上である必要があります。 このAPIのアーキテクチャの概念については、「Oracle REST Data Servicesインストレーションおよび構成ガイド」「Oracle API for MongoDBのサポート」を参照してください。

OCIコンソールからMongoDB APIを有効にするには:
  • Autonomous Database 「詳細」ページで、「ツール構成」タブを選択します。
  • 「ツール構成の編集」をクリックします。
  • MongoDB API行で、「ツールを有効にします」列を選択して「有効」を表示します。
  • 「適用」をクリックします。
ライフサイクル状態は、MongoDBが有効になるまで「更新中」に変わります。

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

MongoDBを手動で有効にするには:

前述のステップのデモは、「Oracle REST Data Servicesインストレーションおよび構成ガイド」「はじめに」を参照してください。

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

MongoDB APIを有効にすると、MongoDBユーザーを作成し、その接続文字列を使用してAutonomous Databaseに接続できます。

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

接続文字列は、Oracle Cloud Infrastructureコンソールから取得できます。 MongoDB API接続文字列を取得するには:
  1. Autonomous Database 「詳細」ページで、「ツール構成」タブを選択します。
  2. MongoDB API行の「アクセスURL」で、「コピー」をクリックします。

Exadata Cloud@CustomerAutonomous DatabaseでMongoDB APIを使用している場合、ネットワーク/DNSチームは、MongoDB接続文字列ホスト名がクラスタのSCANに解決されることを確認する必要があります。 これがないと、MongoDBクライアントはデータベースに接続できなくなります。 ワイルドカードDNSレコードを使用してクラスタ内のすべてのAutonomous Databaseへの接続を許可するか、特定のAutonomous Databaseを許可できます:

MongoDB接続のテスト

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

テスト目的で、テスト・ユーザーまたは同様の認証ユーザーを作成できます。

  1. Autonomous DatabaseのOCIコンソールを開きます。
  2. 「データベース・アクション」をクリックします
  3. データベース・アクションの起動パッドから、「管理」>「データベース・ユーザー」をクリックします。
  4. 「データベース・ユーザー」ページで「+ユーザーの作成」をクリックします。
  5. テスト・ユーザーの「ユーザー名」および「パスワード」を入力します。 「Webアクセス」をクリックし、「表領域DATAの割当て制限」を設定します。
  6. 「付与されたロール」タブをクリックします。
  7. デフォルトのロールに加えて、ユーザーのSODA_APPロールを選択して追加します。
  8. 「ユーザーの作成」をクリックします。

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

  1. テスト・ユーザーとしてログインします。 手順については、前の例のステップに従ってください。
    $ 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;

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