すべてのプロダクト
Search
ドキュメントセンター

:MongoDB 4.0 の互換性の変更

最終更新日:Apr 17, 2025

このトピックでは、MongoDB 4.0 の互換性の変更について説明します。

MongoDB の公式の互換性変更ドキュメントを表示するには、[従来のドキュメント]にアクセスしてください。

MONGODB-CR の廃止

MongoDB 4.0 以降、MongoDB は廃止された MONGODB-CR 認証モードをサポートしなくなりました。

MongoDB 3.0 以降、デプロイメントが V2.6 以前からアップグレードされたもので、元の MONGODB-CR ユーザーの認証モードをアップグレードしていない場合を除き、MONGODB-CR ユーザーを作成できなくなりました。

デプロイメントでユーザー資格情報の保存に MONGODB-CR モードを使用している場合は、デプロイメントを MongoDB 4.0 にアップグレードする前に、モードを Salted Challenge Response Authentication Mechanism (SCRAM) にアップグレードする必要があります。

authSchemaUpgrade コマンドの削除

MongoDB 4.0 では、authSchemaUpgrade コマンドが削除されました。このコマンドは、MongoDB 3.0 から 3.6 で MONGODB-CR ユーザーを SCRAM ユーザーにアップグレードするために使用されていました。

db.copyDatabase() および copydb からの MongoDB-CR サポートの削除

db.copyDatabase() メソッドと copydb コマンドは、MONGODB-CR 認証モードを適用する mongod インスタンスからデータをコピーできません。

この変更に伴い、MongoDB 4.0 では copydbgetnonce コマンドが削除されました。

MMAPv1 の廃止

MongoDB 4.0 以降、MongoDB は MMAPv1 ストレージエンジンを廃止します。インスタンスを WiredTiger ストレージエンジンに移行する必要があります。

X.509 認証証明書の制限

MongoDB 4.0 以降、x.509 認証を使用する際に --sslAllowInvalidCertificates または net.ssl.allowInvalidCertificates: true(MongoDB 4.2 では --tlsAllowInvalidateCertificates または net.tls.allowInvalidCertificates: true に名前変更)を指定した場合、無効な証明書は TLS/SSL 接続を確立するには十分ですが、認証には不十分です。

この問題を解決するには、無効な証明書を有効な証明書(信頼できる CA によって署名されたものなど)に更新するか、net.ssl.CAFile を使用してカスタム CA を指定します。

レプリカセットインスタンス

レプリカセット pv0 の削除

MongoDB 4.0 は、廃止されたレプリカセットプロトコルバージョン 0 (pv0) を削除します。プロトコルバージョンをアップグレードする前に、まず pv1 にアップグレードしてください。サンプルコード:

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

さらに、settings.catchUpTimeoutMillis を増やして、w:1 書き込みコンサーン構成でのロールバックの可能性を減らすことをお勧めします。

マスタースレーブレプリケーションの削除

MongoDB 4.0 は、マスタースレーブレプリケーションをサポートしなくなりました。デプロイメントでこのモードを使用している場合は、デプロイメントをレプリカセット (CSRS) モードに変換する必要があります。

レプリカセットインスタンスのロギング

MongoDB 4.0 以降、WiredTiger ストレージエンジンを使用するレプリカセットメンバーのロギング機能を無効にすることはできません。つまり、--nojournal または storage.journal.enabled: false を指定することはできません。

レプリカセットインスタンスのインデックスビルド

--replSet または replication.replSetName を使用してレプリカセットインスタンスを構成する場合、--noIndexBuildRetry または storage.indexBuildRetry を指定することはできません。つまり、レプリカセットインスタンスのメンバーである mongod インスタンスに --noIndexBuildRetry または storage.indexBuildRetry を指定することはできません。

ロールバックの制限

MongoDB 4.0 は、300 MB のロールバックデータ量の制限を削除し、構成可能なパラメーター rollbackTimeLimitSecs を導入します。MongoDB 4.0 では、デフォルトのロールバック時間制限は 1 日です。MongoDB 4.0 より前は、ロールバック時間制限は 30 分に固定されていました。

シャードクラスターインスタンス

mongos は、シャードクラスターメタデータに影響を与える以下の操作で "majority" 書き込みコンサーンレベルを使用します。

コマンド

メソッド

説明

addShard

sh.addShard()

create

db.createCollection()

drop

db.collection.drop()

dropDatabase

db.dropDatabase()

MongoDB 3.6 で変更されました。

enableSharding

sh.enableSharding()

movePrimary

renameCollection

db.collection.renameCollection()

shardCollection

sh.shardCollection()

removeShard

setFeatureCompatibilityVersion

MongoDB 4.0 の機能互換性

MongoDB 4.0 の一部の機能では、V4.0 バイナリファイルと featureCompatibilityVersion4.0 に設定する必要があります。以下の機能が含まれます。

  • SCRAM-SHA-256

  • 新しい型変換演算子($toBool$toInt など)と機能強化

  • 複数ドキュメントトランザクション

  • $dateToString オプションの変更

  • 新しい変更ストリームメソッド

  • 変更ストリーム再開トークンのデータ型の変更

その他の変更

  • シャードクラスターインスタンスは、地理空間クエリ演算子 $near および $nearSphere をサポートしています。

  • create コマンドと mongo シェルメソッド db.createCollection() では、local データベース以外のデータベースにコレクションを作成する場合、autoIndexId オプションを false に設定することはできません。

  • 認証を有効にして、listDatabases 操作権限なしで listDatabases コマンドを実行すると、MongoDB は find 操作権限を持つすべてのデータベースのリストを返します。MongoDB 4.0 より前は、listDatabases 操作権限なしでコマンドを実行すると、MongoDB は Unauthorized を返していました。

  • taskExecutorPoolSize のデフォルト値が 0 から 1 に変更されました。Linux では、V4.0 デプロイメントの以前の動作に戻すには、taskExecutorPoolSize0 に、AsyncRequestsSenderUseBatonfalse に設定します。

  • MongoDB 4.0 では、mongod インスタンスと mongos インスタンスに対して transportLayernet.transportLayerlegacy に設定することはできません。transportLayer はデフォルトで asio に設定されており、変更できません。

  • MongoDB 4.0 以降、reIndex コマンドとその db.collection.reIndex() はグローバル排他ロックを取得し、完了するまで他の操作をブロックします。

  • yearisoYeartimezone 以外のフィールドの値が有効な範囲を超えている場合、$dateFromParts は他の日付部分との差を減算して日付を計算します。MongoDB 4.0 より前は、有効な範囲を超える値はエラーを引き起こしていました。

  • killCursors 操作の動作が変更されました。MongoDB 4.0 より前は、カーソル ID を取得すると、任意のカーソルを強制終了できました。MongoDB 4.0 以降、killCursors を使用すると、既存のカーソルを強制終了できます。カーソルを強制終了する権限がない場合、killCursors はエラーを返します。

  • MongoDB 4.0 は、指定されたコレクションの任意のカーソルを強制終了する権限を付与する killAnyCursor 操作を追加しました。

  • MongoDB 4.0 以降、mongos インスタンスをより高い機能互換性バージョン (fCV) を持つ別のインスタンスに接続しようとすると、mongos インスタンスがクラッシュする可能性があります。たとえば、MongoDB 4.0 の mongos インスタンスは、fCV が 4.2 に設定されているシャードクラスターインスタンスに接続できません。ただし、シャードクラスターインスタンスの fCV が 4.0 のままの場合は、mongos インスタンスは通常どおり別のインスタンスに接続できます。

  • MongoDB 4.0 以降、MongoDB は 127.0.0.1 と想定するのではなく、指定された設定に基づいて localhost IP アドレスを解決します。

cursor.min() および cursor.max()

max()min() を使用して範囲を指定する場合、max() で指定された境界は min() で指定された境界よりも大きくなければなりません。

以前のバージョンでは、境界が等しくなる可能性がありましたが、インデックスエントリはスキャンされず、空の結果セットが返されていました。

無効化された TLS 1.0

MongoDB バイナリファイル (mongod、mongos、mongo) は、TLS 1.1+ をサポートするシステムでは、デフォルトで TLS 1.0 暗号化を無効にします。

TLS 1.0 を強制的に有効にするには、次の手順を実行します。

  • mongod インスタンスの場合は、構成ファイルで net.ssl.disabledProtocols: none を指定するか、コマンドラインパラメーター --sslDisabledProtocols none を使用します。

  • mongos インスタンスの場合は、net.ssl.disabledProtocols: none または --sslDisabledProtocols none を使用します。

  • mongo シェルの場合は、--sslDisabledProtocols none パラメーターを追加します。

    --sslDisabledProtocols パラメーターは、次の mongo シェルバージョンで使用できます。

    • MongoDB 4.0+

    • MongoDB 3.6.5+

    • MongoDB 3.4.15+

macOS で、MongoDB 3.6.4 以前の mongo シェルを使用して MongoDB 4.0+ のシャードクラスターインスタンスに接続する場合は、TLS 1.0 を明示的に有効にする必要があります。

Mongo シェル

show collections

mongo シェルでは、show collections コマンドは以下と同等です。

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • 権限を持つユーザーの場合、データベース内のすべての非システムコレクションが表示されます。

  • 権限のないユーザーの場合、アクセス可能なコレクションのみが表示されます。

MongoDB 4.0 の mongo シェルが V4.0 より前のバージョンを実行している MongoDB データベースに接続する場合、authorizedCollections パラメーターと nameOnly パラメーターはサポートされません。

  • ユーザーは、コマンドを実行するために listCollection 権限を持っている必要があります。

  • 権限のないユーザーがコマンドを実行すると、MongoDB は connectionStatus によって返される authenticatedUserPrivileges フィールドにおおよその結果を含めます。

db.getCollectionNames()

mongo シェルでは、db.getCollectionNames() メソッドは以下と同等です。

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • アクセス権限を持つユーザーの場合、このメソッドはデータベース内のすべてのコレクションを一覧表示します。

  • アクセス権限のないユーザーの場合、このメソッドは権限を持つコレクションのみを一覧表示します。

バイナリファイルと廃止されたフィールドまたはコマンドの削除

mongoperf

MongoDB 4.0 は、mongoperf バイナリファイルを削除します。

copydb コマンドと clone コマンド

MongoDB 4.0 は、copydb コマンドと clone コマンド、および mongo シェルヘルパー関数 db.copyDatabase()db.cloneDatabase() を廃止します。

代わりに、mongodump と mongorestore (mongorestore オプションの --nsFrom パラメーターと --nsTo パラメーターと共に) またはスクリプトを記述するためのドライバーを使用します。

たとえば、同じインスタンスの test データベースを examples データベースにコピーするには、次の手順を実行します。

  1. mongodump を使用して、test データベースを mongodump-test-db という名前のアーカイブファイルにダンプします。

    mongodump --archive="mongodump-test-db" --db=test
  2. mongorestore--nsFrom パラメーターと --nsTo パラメーターを使用して、アーカイブファイルからデータを復元します。

    mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
説明

--uri--host--username など、必要に応じてパラメーターを追加できます。

または、アーカイブファイルを使用する代わりに、mongodump を使用して test データベースを標準出力ストリームにダンプし、それを mongorestore にパイプします。

mongodump --archive --db=test | mongorestore --archive  --nsFrom='test.*' --nsTo='examples.*'

パラメーター

廃止された logUserIds パラメーターは削除されました。

$isolated 演算子

MongoDB は、$isolated 演算子をサポートしなくなりました。$isolated 演算子を含むインデックスまたはビューがある場合は、アップグレードする前にこの演算子なしで再作成してください。

geoNear コマンド

MongoDB は、geoNear コマンドを廃止します。代わりに、次のコマンドを使用します。

  • $geoNear 集約ステージ

  • $near クエリ演算子

  • $nearSphere クエリ演算子

maxScan オプション

MongoDB は、maxScan オプションと mongo シェルメソッド cursor.maxScan() を廃止します。代わりに、maxTimeMS または mongo シェルメソッド cursor.maxTimeMS() を使用します。

出力フィールドの変更

  • replSetGetStatus 戻り値の次のフィールドは廃止されました。

    • replSetGetStatus.syncingTo

    • replSetGetStatus.members[n].syncingTo

    代わりに、replSetGetStatus.replSetGetStatus.syncSourceHostreplSetGetStatus.members[n].syncSourceHost を使用します。

  • $currentOp 集約ステージ、currentOp コマンド、および db.currentOp() ヘルパー関数は、出力で threadId フィールドを返さなくなりました。

  • serverStatusasserts.warning フィールドは、常に 0 を返します。