Amazon DocumentDB の MongoDB との互換性 - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DocumentDB の MongoDB との互換性

Amazon DocumentDB は、MongoDB 4.0 や MongoDB 5.0 などの MongoDB 互換性をサポートしています。MongoDB 互換性とは、現在お使いの MongoDB データベースで使用しているアプリケーション、ドライバ、ツールの大部分を Amazon DocumentDB でもほとんど変更することなく使用できることを意味します。ここでは、Amazon DocumentDB の新機能、利用開始、移行パス、機能的な違いなど、Amazon DocumentDB の MongoDB との互換性について知っておくべきことをすべて説明します。

MongoDB 5.0 との互換性

Amazon DocumentDB 5.0 の新機能

Amazon DocumentDB 5.0 では、ストレージ制限やクライアント側のフィールドレベルの暗号化など、新機能が導入されています。Amazon DocumentDB 5.0 で導入された主要な機能をいくつか紹介します。新機能の全リストを見るには、「リリースノート」 を参照してください。

  • すべてのインスタンスベースの Amazon DocumentDB クラスターとシャードベースのエラスティッククラスターのストレージ制限を 128 TiB に増大。

  • Amazon DocumentDB 5.0 (エンジンバージョン 3.0.775) の導入

    • MongoDB 5.0 API ドライバーのサポート

    • クライアント側のフィールドレベル暗号化 (FLE) のサポート。Amazon DocumentDB クラスターにデータを書き込む前に、クライアント側でフィールドを暗号化できるようになりました。詳細については、「クライアント側のフィールドレベル暗号化」を参照してください。

    • 新しい集約演算子: $dateAdd$dateSubtract

    • $elemMatch 演算子付きのインデックスをサポートします。その結果、$elemMatch を持つクエリではインデックススキャンが行われます。

Amazon DocumentDB は、すべての MongoDB 5.0 機能をサポートしているわけではありません。Amazon DocumentDB 5.0 を構築する際、お客様から最も多く構築するよう求められた特徴と機能から逆算していきました。今後もお客様の要望をもとに、MongoDB 5.0 の機能を追加していく予定です。サポートされている API の最新リストについては、「Amazon DocumentDB でサポートされている MongoDB APIs、オペレーション、データ型」 を参照してください。

Amazon DocumentDB 5.0 の使用開始

Amazon DocumentDB 5.0 の使用を開始するには、入門ガイド を参照してください。AWS Management Console または AWS SDK、AWS CLI、もしくは AWS CloudFormation を使用して、新しい Amazon DocumentDB 5.0 クラスターを作成できます。Amazon DocumentDB に接続する場合、MongoDB 5.0 以降と互換性のある MongoDB ドライバまたはユーティリティを使用する必要があります。

注記

AWS SDK、AWS CLI、または AWS CloudFormation を使用する場合、エンジンバージョンはデフォルトで 5.0.0. になります。Amazon DocumentDB 4.0 クラスターを新規に作成する場合はパラメータ engineVersion = 4.0.0 を、あるいは Amazon DocumentDB 3.6 クラスターを新規に作成する場合はengineVersion = 3.6.0 を明示的に指定する必要があります。特定の Amazon DocumentDB クラスターについては、AWS CLI を使用して特定のクラスターバージョン番号を指定し、describe-db-clusters を呼び出すか、Amazon DocumentDB マネジメントコンソールを使用して、特定クラスターのエンジンバージョン番号を表示することができます。

Amazon DocumentDB 5.0 は クラスターの r6gt4.medium のインスタンスタイプなど、Amazon EC2 Graviton2 プロセッサーをサポートし、サポートされているすべてのリージョンで利用できます。料金の詳細については、「Amazon DocumentDB (MongoDB 互換) の料金」 を参照してください。

Amazon DocumentDB 4.0 へのアップグレードまたは移行

MongoDB 3.6 または MongoDB 4.0 から Amazon DocumentDB 5.0 への移行は、AWS DMS または mongodumpmongorestoremongoimport および mongoexport のようなユーティリティを利用して行うことができます。移行の手順については、「AWS Database Migration Service を使用して Amazon DocumentDB クラスターをアップグレードする」 を参照してください。

機能的な違い

Amazon DocumentDB 4.0 と 5.0 の機能的な違い

Amazon DocumentDB 5.0 のリリースに伴い、Amazon DocumentDB 3.6 と Amazon DocumentDB 4.0 には機能上の違いがあります。

  • バックアップビルトインロールが serverStatus をサポートするようになりました。アクション - バックアップロールを持つデベロッパーおよびアプリケーションは、Amazon DocumentDB クラスターの状態に関する統計を収集できます。

  • replSetGetConfig 出力では SecondaryDelaySecs フィールドが slaveDelay を置き換えます。

  • hello コマンドは isMaster を置き換えます - hello は Amazon DocumentDB クラスターの役割を説明するドキュメントを返します。

  • Amazon DocumentDB 5.0 では、最初のネストレベルで $elemMatch 演算子によるインデックススキャンをサポートするようになりました。インデックススキャンは、クエリのみのフィルタに 1 つのレベルの $elemMatch フィルタがある場合はサポートされますが、ネストされた $elemMatch クエリが含まれる場合はサポートされません。

    たとえば、Amazon DocumentDB 5.0 では、ネストされたレベルに $elemMatch 演算子を含めても、Amazon DocumentDB 4.0 のように値を返しません。

    db.foo.insert( [ {a: {b: 5}}, {a: {b: [5]}}, {a: {b: [3, 7]}}, {a: [{b: 5}]}, {a: [{b: 3}, {b: 7}]}, {a: [{b: [5]}]}, {a: [{b: [3, 7]}]}, {a: [[{b: 5}]]}, {a: [[{b: 3}, {b: 7}]]}, {a: [[{b: [5]}]]}, {a: [[{b: [3, 7]}]]} ]); // DocumentDB 5.0 > db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0}) { "a" : [ { "b" : [ 5 ] } ] } // DocumentDB 4.0 > db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0}) { "a" : [ { "b" : [ 5 ] } ] } { "a" : [ [ { "b" : [ 5 ] } ] ] }
  • Amazon DocumentDB 4.0 では、「$」プロジェクションはすべてのドキュメントとすべてのフィールドを返します。Amazon DocumentDB 5.0 では、「$」プロジェクションを使用する find コマンドは、「$」プロジェクションと一致したフィールドのみを含むクエリパラメータに一致するドキュメントを返します。

  • Amazon DocumentDB 5.0 では、$regex および $options クエリパラメータを指定した find コマンドは、「$regex$options の両方にオプションを設定することはできません」というエラーを返します。

  • Amazon DocumentDB 5.0 では、以下の場合に $indexOfCP は「-1」を返します。

    • 文字列式内に部分文字列がない場合、または

    • 開始値が終了値より大きい場合、または

    • 開始値がは文字列のバイト長より大きい場合。

  • Amazon DocumentDB 4.0 では、開始位置が文字列の終了またはバイト長よりも大きい数値の場合、$indexOfCP は「0」を返します。

  • Amazon DocumentDB 5.0 では、たとえば {"_id.nestedField" : 1} のような _id fields の射影演算は、投影されたフィールドのみを含むドキュメントが返されます。これに対し、Amazon DocumentDB 4.0 の場合、入れ子にされたフィールドプロジェクトコマンドではどのドキュメントも除外しません。

MongoDB 4.0 の互換

Amazon DocumentDB 4.0 機能

Amazon DocumentDB 4.0 では、ACID トランザクションや変更ストリームの改良など、多くの新機能が導入されました。Amazon DocumentDB 4.0 で導入された主要な機能をいくつかを以下に要約します。機能の全リストを見るには、「リリースノート」 を参照してください。

  • ACID トランザクション: Amazon DocumentDB は、複数のドキュメント、ステートメント、コレクション、およびデータベース間でトランザクションを実行する機能をサポートするようになりました。トランザクションは、Amazon DocumentDB クラスター内の 1 つまたは複数のドキュメントに対し、アトミックで一貫性、分離、耐久性(ACID)のあるオペレーションを実行できるようにすることで、アプリケーション開発を簡素化します。詳細については、Amazon DocumentDB でのトランザクション を参照してください。

  • 変更ストリーム: これで、クラスターレベル (client.watch() または mongo.watch()) とデータベース (db.watch()) で変更ストリームを開くことができるようになりました 。startAtOperationTime をクリックして変更ストリームカーソルを開き、最後に、変更ストリームの保持期間を 7 日 (以前は 24 時間) に延長できます。詳細については、「Amazon DocumentDB を用いた変更ストリームの使用」を参照してください。

  • AWS Database Migration Service(AWS DMS): AWS DMS で MongoDB 4.0 ワークロードを Amazon DocumentDB に移行できるようになりました。AWS DMS では現在、MongoDB 4.0 ソース、Amazon DocumentDB 4.0 ターゲット、Amazon DocumentDB 3.6 と 4.0 の間のアップグレード用に Amazon DocumentDB 3.6 ソースがサポートされるようになりました。詳細については、AWS DMS ドキュメント を参照してください。

  • パフォーマンスとインデックス作成: $lookup で、インデックスを使用できるようになり、1 フィールドまたは 1 フィールドと _id フィールドを含む投影による検索クエリは、インデックスから直接提供でき、コレクション(カバークエリ)から読み取る必要がなくなり、hint()findAndModify をする機能、$addToSet のパフォーマンスの最適化、および全体的なインデックスサイズを小さくするための改良が行われました。詳細については、「リリースノート」を参照してください。

  • 演算子: Amazon DocumentDB 4.0 では、いくつかの新しい集計演算子がサポートされるようになりました: $ifNull$replaceRoot$setIsSubset$setInstersection$setUnion$setEqualsAmazon DocumentDB でサポートされている MongoDB APIs、オペレーション、データ型 でサポートされるすべての MongoDB API、オペレーション、およびデータタイプを確認できます。

  • ロールベースのアクセスコントロール(RBAC): ListCollectionListDatabase の両方のコマンドで、オプションとして authorizedCollectionsauthorizedDatabases パラメータを使用することができるようになり、ユーザーが listCollectionslistDatabase ロールを必要とすることなくアクセス許可を持つコレクションとデータベースを一覧表示できるようになりました。また、KillCursor ロールを必要とすることなく自分のカーソルを強制終了させる機能もあります。

Amazon DocumentDB は、すべての MongoDB 4.0 機能をサポートしているわけではありません。Amazon DocumentDB 4.0 を構築する際、お客様から最も多く構築するよう求められた特徴と機能から逆算していきました。今後もお客様の要望をもとに、MongoDB 4.0 の機能を追加していく予定です。例えば、Amazon DocumentDB 4.0 では、現在、MongoDB 4.0 で導入されていた型変換演算子または文字列演算子をサポートしていません。サポートされている API の最新リストについては、Amazon DocumentDB でサポートされている MongoDB APIs、オペレーション、データ型 を参照してください。

Amazon DocumentDB 4.0 の使用開始

Amazon DocumentDB 4.0 の使用を開始するには、入門ガイド を参照してください。AWS Management Console または AWS SDK、AWS CLI、もしくは AWS CloudFormation を使用して、新しい Amazon DocumentDB 4.0 クラスターを作成できます。Amazon DocumentDB に接続する場合、MongoDB 4.0 以降と互換性のある MongoDB ドライバまたはユーティリティを使用する必要があります。

注記

AWS SDK、AWS CLI、または AWS CloudFormation を使用する場合、エンジンバージョンはデフォルトで 5.0.0. になります。Amazon DocumentDB 4.0 クラスターを新規に作成する場合はパラメータ engineVersion = 4.0.0 を、あるいは Amazon DocumentDB 3.6 クラスターを新規に作成する場合はengineVersion = 3.6.0 を明示的に指定する必要があります。特定の Amazon DocumentDB クラスターについては、AWS CLI を使用して特定のクラスターバージョン番号を指定し、describe-db-clusters を呼び出すか、Amazon DocumentDB マネジメントコンソールを使用して、特定クラスターのエンジンバージョン番号を表示することができます。

Amazon DocumentDB 4.0 は r5r6gt3.medium および、クラスターの t4g.medium インスタンスタイプをサポートし、サポートされているすべてのリージョンで利用できます。Amazon DocumentDB 4.0 を使用しても追加コストは発生しません。料金の詳細については、Amazon DocumentDB (MongoDB 互換) の料金 を参照してください。

Amazon DocumentDB 4.0 へのアップグレードまたは移行

MongoDB 3.6 または MongoDB 4.0 から Amazon DocumentDB 4.0 への移行は、AWS DMS または mongodumpmongorestoremongoimport および mongoexport のようなユーティリティを利用して行うことができます。同様に、同じツールを使用して Amazon DocumentDB 3.6 から Amazon DocumentDB 4.0 にアップグレードできます。移行の手順については、AWS Database Migration Service を使用して Amazon DocumentDB クラスターをアップグレードする を参照してください。

機能的な違い

Amazon DocumentDB 3.6 と 4.0 の機能的な違い

Amazon DocumentDB 4.0のリリースに伴い、Amazon DocumentDB 3.6と Amazon DocumentDB 4.0には機能上の違いがあります。

  • ネストドキュメントの投影: Amazon DocumentDB 3.6 は、投影法を適用するときに、ネストドキュメントの最初のフィールドを考慮します。ただし、Amazon DocumentDB 4.0 はサブドキュメントを解析し、各サブドキュメントにも投影法を適用します。たとえば、投影が "a.b.c": 1 の場合、両方のバージョンでの動作は同じです。ただし、投影が {a:{b:{c:1}}} だとすると、Amazon DocumentDB 3.6 は投影を 'a' にのみ適用し、'b' や 'c' には適用しません。

  • minKeymaxKey 動作: Amazon DocumentDB 4.0 では、{x:{$gt:MaxKey}} では何も返しませんが、{x:{$lt:MaxKey}} ではすべてを返します。

  • ドキュメント比較の相違: サブドキュメント内 (例: b{"_id" :1, "a" :{"b":1}})の 異なるタイプ (double、int、long) の数値比較では、数値データ型とドキュメントの各レベルにわたって一貫した出力が提供されるようになりました。

Amazon DocumentDB 4.0 と MongoDB 4.0 の機能的な違い

以下は、Amazon DocumentDB 4.0 と MongoDB 4.0 の機能的な違いです。

  • パスに空のキーがある場合のルックアップ: コレクションに、配列内 (例: {"x" : [ { "" : 10 }, { "b" : 20 } ]}) に空のキーを持つドキュメントが含まれている場合、そしてクエリで使用されるキーが空の文字列 (例: x.) で終わる場合は、Amazon DocumentDB は配列内のすべてのドキュメントを走査するのでそのドキュメントを返しますが、一方 MongoDB はそのドキュメントを返しません。

  • パスの$setOnInsert に沿った $: フィールド演算子 $setOnInsert は Amazon DocumentDBのパスの $ との組み合わせでは動作しませんが、これは MongoDB 4.0 と同じです。