MongoDB 6.0 での互換性の変更
項目一覧
このページでは、MongoDB 6.0 で導入された、古いバージョンの MongoDB との互換性に影響を与える可能性のある変更について説明します。
MongoDB 6.0 はメジャー リリースであるため、MongoDB Atlas とオンプレミスの配置の両方でサポートされます。MongoDB 6.0 には、MongoDB Rapid Release 5.1、5.2、および 5.3 で導入された変更が含まれています。このページでは、これらの Rapid Release と MongoDB 6.0 で導入された互換性の変更について説明します。
メジャー リリースと Rapid Release の違いの詳細については、「 MongoDB のバージョン管理 」を参照してください。
集計
allowDiskUse
変更点
MongoDB 6.0 以降、 100 MB 以上のメモリを必要とするパイプライン ステージでは、デフォルトで一時ファイルをディスクに書き込みます。これらの一時ファイルはパイプラインの実行中ずっと残り、インスタンスのストレージ容量に影響を与える可能性があります。以前のバージョンの MongoDB では、この動作を有効にするには、個々の find
コマンドと aggregate
コマンドに { allowDiskUse: true }
を渡す必要がありました。
個々の find
と aggregate
コマンドは、次のいずれかの方法で allowDiskUseByDefault
パラメーターを上書きできます。
allowDiskUseByDefault
がfalse
に設定されている場合に{ allowDiskUse: true }
を使用して一時ファイルをディスクに書き込むことを許可するallowDiskUseByDefault
がtrue
に設定されている場合に{ allowDiskUse: false }
を使用して一時ファイルがディスクに書き込むことを禁止する
$$SEARCH_META
制限
MongoDB 6.0 700} 以降では、Atlas Search $$SEARCH_META
集計変数は、任意のパイプラインのどこでも $search
ステージの後に使用できますが、どのパイプラインの$lookup
または$unionWith
ステージ以降では使用できません。 $$SEARCH_META
集計変数は、 $searchMeta
ステージ以降のどのステージでも使用できません。
変更ストリーム
孤立したドキュメント
MongoDB 5.3 以降では、範囲の移行 中に、孤立したドキュメントの更新に対して 変更ストリームイベントは生成されません。
再開トークン
MongoDB 6.0.9 以降、新しい$changeStreamSplitLargeEvent
ステージを持つ変更ストリーム パイプラインによって作成される再開トークンは、MongoDB 5.0 と互換性がありません。 再開トークンの詳細については、「再開トークン 」を参照してください。
フィルター
MongoDB 6.0 以降では可能な限り、一致フィルターが変更ストリームに適用される時期が以前のリリースより早くなっています。これにより、パフォーマンスが向上します。ただし、フィルターが狭く定義されている場合は、早期に一致させることで、以前のバージョンでは成功する操作が 6.0 では失敗する可能性があります。
Indexes
最後に残ったシャードキーインデックスを不注意で削除することありません
MongoDB 6.0 以降では、"*"
を dropIndexes
または db.collection.dropIndexes()
に渡すと、_id
インデックスと最後に残っているシャードキー インデックス(存在する場合)を除くすべてのインデックスが削除されます。最後に残っているシャードキー インデックスを明示的に削除しようとすると、エラーが発生します。
インデックス構築中に既存のインデックスを削除できます
MongoDB 5.2 以降では、インデックス構築が進行中の場合でも、dropIndexes
または db.collection.dropIndexes()
を使用して同じコレクション上の既存のインデックスを削除できます。以前のバージョンでは、インデックス構築が進行中に別のインデックスを削除しようとすると BackgroundOperationInProgressForNamespace
エラーが発生していました。
2dsphere ドキュメント インデックス キー
メモリ不足エラーを防ぐために、indexMaxNumGeneratedKeysPerDocument
は 1 つのドキュメントに対して生成される 2dsphere インデックス キーの最大数を制限します。
indexMaxNumGeneratedKeysPerDocument
を参照してください。
インデックスキーの形式
MongoDB 6.0 以降では、一意なインデックスキー形式への変更が導入されました。MongoDB 6.0 で一意なインデックスを作成した場合、そのインデックスは 5.3.2 や 5.0.7 より前のバージョンの MongoDB では機能しません。
mongo
削除されたレガシー shell
mongo
shell は MongoDB 6.0 から削除されました。mongosh
. が代替として提供されています。
プラットフォーム サポート
MongoDB 5.1.2 以降、次のプラットフォームはサポートされなくなりました。
Community Edition
RHEL-72-s390x
正規表現
$regex
Find クエリが無効な正規表現を無視しなくなりました
MongoDB 5.1 以降、無効な $regex options
オプションが無視されなくなりました。この変更により、$regex options
は、aggregate
コマンドおよびプロジェクション クエリでの $regex
の使用との一貫性が向上します。
$regex
スキーマ検証エラーの動作
MongoDB 5.1 以降では、コレクションに無効な $regex options
を含む スキーマ検証 ルールがある場合、サーバーは次のように動作します。
削除された演算子
MongoDB 5.1 以降、以下のレガシーなクエリ演算子は削除されました。
削除された演算子 | 代替 |
---|---|
$comment | |
$explain | |
$hint | |
$max | |
$maxTimeMS | |
$min | |
$orderby | |
$query | カーソル メソッドを参照 |
$returnKey | |
$showDiskLoc | |
db.getLastError() | 「削除されたレガシー命令コード」を参照してください。 |
db.getLastErrorObj() | 「削除されたレガシー命令コード」を参照してください。 |
getLastError | 「削除されたレガシー命令コード」を参照してください。 |
削除されたオプション
MongoDB 6.0 では、--cpu
mongod
オプションが削除されます。
削除されたパラメーター
MongoDB 6.0 では、次のサーバー パラメータが削除されます。
削除されたパラメータ | 説明 |
---|---|
このオプションは MongoDB コミュニティ エディション から削除されました。MongoDB Enterprise エディションで利用できます。 FIPS は MongoDB コミュニティ エディション ではサポート外の機能でした。インストールで FIPS が使用されている場合は、アップグレードする前に TLS/SSL 接続を再構成する必要があります。 |
名前が変更されたパラメータ
MongoDB 6.0 以降では、次のパラメータの名前が変更されました。
wiredTigerConcurrentReadTransactions
は次のように変更されました:storageEngineConcurrentReadTransactions
wiredTigerConcurrentWriteTransactions
は次のように変更されました:storageEngineConcurrentWriteTransactions
に設定した場合の TTL の動作expireAfterSeconds
NaN
TTL expireAfterSeconds
をNaN
に設定すると、MongoDB 4.4から MongoDB 6.0への動作が変更され、MongoDB 4.4以前と MongoDB 4からのmongorestore
からの最初の同期に影響します。 4以前 これらのアクションのいずれかを実行すると、 NaN
のexpireAfterSeconds
は0
のexpireAfterSeconds
として扱われます。 その結果、ドキュメントの有効期限がすぐに切れる可能性があります。
レプリカセット
シャードの起動時または追加時に、クラスター全体での書込み保証 (write concern) が設定されていることを確認
MongoDB 5.1 以降では、sh.addShard()
でシャード サーバーを起動、再起動または追加する際に、クラスター全体の書込み保証(CWWC)を設定する必要があります。
CWWC
が設定されておらず、デフォルトの書込み保証(write concern)が{ w : 1 }
になるようにシャードが構成されている場合、シャード サーバーは起動または追加に失敗し、エラーが返されます。
デフォルトの書込み保証(write concern)の詳細な計算方法については、「デフォルトの書込み保証の計算」を参照してください。
rs.reconfig
クラスター全体の書込み保証 (write concern) の検証
MongoDB 5.1 以降では、新しいレプリカセットのデフォルトの書込み保証 (write concern) を変更する reconfigs
を発行する前に、クラスター全体の書込み保証 (CWWC) を設定する必要があります。
セキュリティ
クラスター内認証
MongoDB 5.3 以降では、クラスター内認証に SCRAM-SHA-1 は使用できません。SCRAM-SHA-256 のみがサポートされます。
前の MongoDB バージョンでは、SCRAM が明示的に有効になっていなくても、SCRAM-SHA-1 と SCRAM-SHA-256 の両方をクラスター内認証に使用できます。
FIPS モードでは SCRAM-SHA-1 認証がデフォルトでオフ
MongoDB 5.1 以降、FIPS モードで実行中のインスタンスでは、SCRAM-SHA-1 認証メカニズムがデフォルトで無効になっています。setParameter.authenticationMechanisms コマンドを使用して SCRAM-SHA-1 認証メカニズムを有効にできます。
この変更は、MongoDB setFeatureCompatibilityVersion
4.0 以降を対象とするドライバーには影響しません。
OCSP を有効にする必要があります
MongoDB 6.0 以降では、最初の同期中に ocspEnabled
が true
に設定された場合、すべてのノードがOCSPレスポンダに到達できるはずです。
ノードが STARTUP2
状態で失敗した場合、tlsOCSPVerifyTimeoutSecs
を 5
未満の値に設定します。
時系列コレクション
警告
MongoDB 5.1 以降でシャーディングされた時系列コレクションを作成した場合、MongoDB 5.0.4 より前のバージョンにダウングレードするとデータが失われます。
5.0.4 より古いバージョンにダウングレードする前に、シャーディングされた時系列コレクションをすべて削除します。
時系列コレクションのセカンダリインデックス
時系列コレクションにセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。setFeatureCompatibilityVersion
を参照してください。
一般的な変更点
非推奨
非推奨 | 説明 |
---|---|
db.collection.reIndex() メソッドは MongoDB v6.0 では非推奨です。 | |
reIndex コマンドは MongoDB v6.0 では非推奨です。 | |
簡易ネットワーク マネジメント プロトコル (SNMP) | MongoDB 6.0以降、 SNMP は非推奨であり、次のリリースで削除される予定です。 配置を監視するには、 MongoDB Ops Managerを使用します。 |
$mod
エラー動作
MongoDB 5.1 (および5.0.4 )以降、 divisor
またはremainder
の値が特定の値に評価されると、 $mod
演算子はエラーを返します。 $mod の動作 を参照してください。
レガシー命令コードの削除
MongoDB 6.0 では、次のレガシー命令コードとデータベースコマンドのサポートが削除されます。
警告
ドライバーのアップグレード
これらの命令コードの削除による中断を避けるため、ドライバを最新バージョンにアップグレードしてください。
v3.6 で非推奨になったレガシー命令コードをドライバーが使用している場合は、サポートされている命令コードを使用するバージョンにドライバーを更新してください。 レガシー命令コードを使用するドライバーはサポートされなくなりました。
MongoDB 5.1 以降の mongo
shell を使用して MongoDB 3.4 以前の mongod
インスタンスに接続しようとすると、次のようなエラーメッセージが表示されます。
Connection handshake failed. Is your mongod 3.4 or older? :: caused by :: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017'
mongod のレガシー命令コードへの対応
MongoDB 3.6 以降、MongoDB ドライバーは OP_QUERY やその他のレガシー命令コード、コマンドの代わりに OP_MSG を使用しています。
MongoDB 6.0 以降:
サーバーサイド JavaScript で非推奨の配列および文字列関数を削除した
MongoDB 6.0では、サーバーサイド JavaScript 、$accumulator
、$function
、$where
式に使用される内部 JavaScript エンジンが MozJS-60 から MozJS-91 にアップグレードされています。MozJS-60に存在した非推奨、非標準の配列関数と文字列関数は、MozJS-91 で一部削除されました。
削除された配列関数と文字列関数の完全なリストについては、このページの次のセクションを参照してください。
注意
静的関数のみ削除
静的な JavaScript 関数のみが削除されます。削除された関数に相当するプロトタイプ関数は引き続き使用できます。
以下に例を挙げます。
Array.concat(<array1>, <array2>)
は静的関数であり、MongoDB 6.0 では動作しなくなりました。<array1>.concat(<array2>)
はプロトタイプ関数であり、MongoDB 6.0 でも引き続き動作します。
この動作は、削除された配列関数と削除された文字列関数の両方に適用されます。
削除された配列関数
MongoDB 6.0 以降、次の配列関数は削除され、$accumulator
、 $function
、および $where
式を含むサーバーサイド JavaScript で使用できなくなります。
Array.concat
Array.every
Array.filter
Array.forEach
Array.indexOf
Array.join
Array.lastIndexOf
Array.map
Array.pop
Array.push
Array.reduce
Array.reduceRight
Array.reverse
Array.shift
Array.slice
Array.some
Array.sort
Array.splice
Array.unshift
削除された文字列関数
MongoDB 6.0 以降、次の配列関数は削除され、$accumulator
、 $function
、および $where
式を含むサーバーサイド JavaScript で使用できなくなります。
String.charAt
String.charCodeAt
String.concat
String.contains
String.endsWith
String.includes
String.indexOf
String.lastIndexOf
String.localeCompare
String.match
String.normalize
String.replace
String.search
String.slice
String.split
String.startsWith
String.substr
String.substring
String.toLocaleLowerCase
String.toLocaleUpperCase
String.toLowerCase
String.toUpperCase
String.trim
String.trimLeft
String.trimRight
デフォルトのdb.stats()
設定
MongoDB 6.0 以降では、dbStats
コマンドと db.stats()
メソッドは、freeStorage パラメータが 1 に設定されている場合にのみ、コレクションに割り当てられた空き領域を報告します。
インデックスフィルターと照合
MongoDB 6.0 以降、インデックス フィルターは、以前はplanCacheSetFilter
コマンドを使用して設定されていた照合を使用します。
コマンドによるコレクションとビュー内の配列distinct
MongoDB 6.0 以降では、配列を使用する場合、distinct
コマンドはコレクションとビューに対して同じ結果を返します。
「コレクションとビュー内の配列」を参照してください。
ダウングレードの考慮事項
次のセクションでは、配置から下位互換性のない機能を削除するための情報を提供します。MongoDB 6.0 から以前のバージョンにダウングレードする場合は、以下のセクションを確認して、ダウングレード後に配置が正常に実行されることを確認してください。
クラスター化されたコレクション
MongoDB 5.3 以降では、クラスター化されたコレクションを使用している場合、以前の MongoDB バージョンにダウングレードする前に、それらのコレクションを削除する必要があります。
ユーザー書き込みのブロック
MongoDB 6.0 以降では、機能の互換性バージョンをダウングレードする必要がある場合は、クラスター間のレプリケーションとユーザー書込みブロックを無効にしてください。
「Cluster-to-Cluster Sync とユーザー書き込みのブロック」を参照してください。
時系列コレクション
以下のダウングレードを行う前に、時系列コレクションを削除する必要があります。
MongoDB 6.0 以降から MongoDB 5.0.7 またはそれ以前のバージョンへ
MongoDB 5.3 から MongoDB 5.0.5 以前のバージョンへ
「時系列コレクション」を参照してください。
Cluster Parameters
MongoDB 6.0 以降では、すべての setClusterParameter
操作が完了していることを確認してください。シャーディングされたクラスターで実行中の setClusterParameter
操作がある場合、 fCV のダウングレードは正常に実行されません。
SELinux ポリシー データ
MongoDB 5.1 以降で MongoDB の前のバージョンにダウングレードするには、SELinux ポリシーのクローンが過去に作成されたディレクトリから次のコマンドをダウングレード前に実行する必要があります。
sudo make uninstall
次を参照してください。
Key Management Interoperability Protocol (KMIP) 設定
MongoDB 6.0以降、デフォルトの KMIPプロトコルバージョンは1.2です。 KMIP バージョン1.0または1.1を使用するには、 useLegacyProtocol
設定を使用します。
MongoDB 5.3 Enterprise 以降では、次の KMIP 設定を使用している場合、以前の MongoDB バージョンにダウングレードする前に、構成ファイルからそれらを削除する必要があります。
コレクションの変更ストリームの事前イメージと事後イメージの時間ベースの保存
MongoDB 6.0 以降では、changeStreamOptions.preAndPostImages.expireAfterSeconds
を使用してコレクションの変更ストリームの事前イメージと事後イメージの時間ベースの保持をコントロールする場合、ダウングレード時にアクティブな setClusterParameter
操作がないことを確認する必要があります。
監査ログの暗号化設定
MongoDB 6.0 Enterprise 以降、監査ログの暗号化を使用している場合、以前のバージョンの MongoDB にダウングレードする前に、構成ファイルから次の設定を削除する必要があります。
既存の暗号化された監査ログは暗号化されたままなので、暗号化されたログの保存と処理のために開発した手順はすべてそのまま使用できます。
「監査ログ」を参照してください。
変更ストリームにおけるドキュメントの変更前と変更後のイメージ
MongoDB 6.0 以降では、変更ストリームにドキュメントの変更前のイメージと変更後のイメージを使用している場合、以前の MongoDB バージョンにダウングレードする前に、collMod
コマンドを使用して各コレクションの changeStreamPreAndPostImages を無効にする必要があります。
変更ストリームの拡張イベント
アプリケーションで変更ストリームを使用する場合は、ダウングレード後に使用できなくなる showExpandedEvents
オプションが不要であることを確認してください。
と での LDAPsrv:
srv_raw:
クラスターの構成で、LDAP 構成に新しい"srv:"
または"srv_raw:"
URL タイプが使用されている場合、ダウングレード後に再起動することはできません。 ダウングレードする前に、クラスターの設定から新しい URL タイプを削除してください。
暗号化されたフィールドのあるコレクション
fCV ダウングレードを完了する前に、暗号化されたフィールドを使用するコレクションを削除する必要があります。encryptedFields
を使用しているコレクションがある場合、ダウングレードは完了しません。
サーバー パラメータ
MongoDB 6.0 および 5.0.10 以降では、 coordinateCommitReturnImmediatelyAfterPersistingDecision
のデフォルト値はfalse
です。