このトピックでは、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" 書き込みコンサーンレベルを使用します。
コマンド | メソッド | 説明 |
|
| |
|
| |
|
| |
|
| MongoDB 3.6 で変更されました。 |
|
| |
| ||
|
| |
|
| |
| ||
|
MongoDB 4.0 の機能互換性
MongoDB 4.0 の一部の機能では、V4.0 バイナリファイルと featureCompatibilityVersion を 4.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 デプロイメントの以前の動作に戻すには、taskExecutorPoolSizeを0に、AsyncRequestsSenderUseBatonをfalseに設定します。MongoDB 4.0 では、mongod インスタンスと mongos インスタンスに対して
transportLayerとnet.transportLayerをlegacyに設定することはできません。transportLayerはデフォルトでasioに設定されており、変更できません。MongoDB 4.0 以降、
reIndexコマンドとそのdb.collection.reIndex()はグローバル排他ロックを取得し、完了するまで他の操作をブロックします。year、isoYear、timezone以外のフィールドの値が有効な範囲を超えている場合、$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と想定するのではなく、指定された設定に基づいてlocalhostIP アドレスを解決します。
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 データベースにコピーするには、次の手順を実行します。
mongodumpを使用して、testデータベースをmongodump-test-dbという名前のアーカイブファイルにダンプします。mongodump --archive="mongodump-test-db" --db=testmongorestoreと--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.syncingToreplSetGetStatus.members[n].syncingTo
代わりに、
replSetGetStatus.replSetGetStatus.syncSourceHostとreplSetGetStatus.members[n].syncSourceHostを使用します。$currentOp集約ステージ、currentOpコマンド、およびdb.currentOp()ヘルパー関数は、出力でthreadIdフィールドを返さなくなりました。serverStatusのasserts.warningフィールドは、常に0を返します。