次の 5.0 の変更は、MongoDB の古いバージョンとの互換性に影響を与える可能性があります。
一部のコマンドは、認識されたパラメーターのみを受け入れ
MongoDB 5.0 以降、特定のデータベースコマンドで明示的に受け入れられないパラメーターが渡されると、エラーが発生します。MongoDB 4.4 以前では、認識されないパラメーターは暗黙で無視されます。
影響を受けるコマンド:
削除されたコマンド
MongoDB 5.0 以降では、次のデータベースコマンドと mongo シェルヘルパー メソッドが排除されます。
削除されたコマンド | 代替 |
|---|---|
| |
| |
| |
なし | |
| 地理空間クエリ演算子の 1 つ |
| |
| なし |
| |
| |
なし | |
なし |
削除されたパラメーター
MongoDB 5.0 では、次のサーバーパラメーターが除かれます。
削除されたパラメーター | 説明 |
|---|---|
| MongoDB 5.0 では、 |
| MongoDB 5.0 では、 |
| MongoDB 5.0 では、 |
| MongoDB 5.0 では、 |
| MongoDB 5.0 では、 |
削除されたインデックスの型
MongoDB 5.0 では、非推奨の geoHaystack インデックスが除かれます。代わりに 2D インデックスを使用します。
MongoDBインスタンスを 5.0 にアップグレードし、featureCompatibilityVersion を 5.0 に設定すると、既存の geoHaystack インデックスがすべて削除されます。
削除されたメトリクス
MongoDB 5.0 以降、serverStatus コマンドは、クエリ操作で指定された読み取り保証 (read concern) レベルを含む、opReadConcernCounters を出力しません。代わりに、新しい readConcernCounters がopReadConcernCounters に置き換わり、追加情報が含まれます。
MongoDB 5.0 以降では、serverStatus コマンドは wiredTiger.snapshot-window-settings の下で cache pressure percentage threshold と current cache pressure percentage を出力しません。
currentOp 出力の変更
MongoDB 5.0 以降では、$currentOp.remainingOperationTimeEstimated メトリクスは、再シャーディング操作が行われているときにのみ受信者シャードに存在します。
削除された Raspberry Pi サポート
MongoDB 5.0 では Raspberry Pi のサポートが除かれます。Raspberry Pi で MongoDB を実行するには、バージョン 4.4 をインストールします。
NaN に設定した場合の TTL expireAfterSeconds 動作
MongoDB 5.0 以降では、expireAfterSeconds が NaN に設定された TTL インデックスの動作が以前のバージョンと比べて変更されます。
動作の変更は以下に影響します。
直接のアップグレード
以前のバージョンからの最初の同期
mongorestore以前のバージョンから
これらのアクションのいずれかを実行すると、NaN の expireAfterSeconds の値が 0 のexpireAfterSeconds として扱われます。その結果、ドキュメントはすぐに期限切れになる可能性があります。
MongoDB 5.0.14 (および 6.0.2) 以降では、サーバーは expireAfterSeconds が NaN に設定されている TTL インデックスを使用しません。
shell の変更
MongoDB v 5.0ではmongo shell は非推奨になりました。 置き換え shell はmongoshです。
MongoDB v 5.0 ではshellのパッケージも変更されています。詳細については、「インストール手順」を参照してください。
レプリカセット
enableMajorityReadConcern が構成不可に
MongoDB 5.0 以降では、ストレージエンジンの改善により、enableMajorityReadConcern と --enableMajorityReadConcern は変更できなくなり、常にtrue に設定されています。
MongoDB の以前のバージョンでは、enableMajorityReadConcern と --enableMajorityReadConcern を構成可能であり、これらを false に設定して、ストレージ キャッシュの負荷が 3 つのノードからなるプライマリとセカンダリのアービタ(PSA)アーキテクチャで配置が固定されないようにできます。
3 ノードのプライマリセカンダリアービタ(PSA)アーキテクチャを使用している場合は、次の点を考慮してください。
セカンダリが使用できなくなったり遅延が発生したりすると、 書込み保証 (write concern
"majority"によってパフォーマンスの問題が発生することがあります。 こうした問題を軽減するためのアドバイスについては、「自己管理型 PSA レプリカセットのパフォーマンスの問題の軽減 」を参照してください。グローバル デフォルト
"majority"を使用しており、書込み保証 (write concern) が過半数のサイズより小さい場合、クエリは古い(完全には複製されていない)データを返すことがあります。
secondaryDelaySecs 構成設定
MongoDB 5.0 以降では、secondaryDelaySecs が slaveDelayに置き換えられます。この変更は後方互換性がありません。
スプリットホライゾン DNS に必要なホスト名
分裂ホライズンDNS のクラスター ノードを構成するにはIPアドレスの代わりにホスト名を使用します。
MongoDB v5.0 以降の replSetInitiate と replSetReconfig では、ホスト名の代わりに IP アドレスを使用する設定は拒否します。
ホスト名を使用するように更新できないノードを変更するには、disableSplitHorizonIPCheck を使用します。このパラメーターはコンフィギュレーション コマンドにのみ適用されます。
mongodとmongosは起動時の検証に関してdisableSplitHorizonIPCheckに依存しません。 ホスト名の代わりに IP アドレスを使用する従来のmongodおよびmongosインスタンスは、アップグレード後に起動できます。
IP アドレスで設定されたインスタンスでは、IP アドレスの代わりにホスト名を使用するように警告がログに記録されます。
非トランザクション読み取りの変更: config.transactions
MongoDB 5.0 以降では、次の読み取り保証(read concern)とオプションのある config.transactions コレクションでは非トランザクションは読み取れません。
"majority"と afterClusterTime オプションが設定されている因果整合性のあるセッション 内で
"majority"MongoDB ドライバー と を使用する場合
手動 oplog 書き込み
MongoDB 5.0 以降では、レプリカセットとして実行中のクラスター上の oplog への手動書き込み操作は実行できなくなりました。スタンドアロン インスタンスとして実行中に oplog への書き込み操作を実行する場合は、MongoDB サポートのガイダンスに必ず従う必要があります。
新しい投票レプリカセットノードの自動再構成
MongoDB 5.0 以降では、新しく追加されたセカンダリは投票ノードとしてカウントされず、SECONDARY 状態に達するまで選出されません。
新しい投票ノードがレプリカセットに追加されると、replSetReconfig はノードの構成に newlyAdded フィールドを内部的に追加します。newlyAdded フィールドを持つノードは、現在の投票ノードの数にはカウントされません。最初の同期が完了し、ノードがSECONDARY の状態に達すると、newlyAdded フィールドは自動的に削除されます。
注意
newlyAddedという名前のフィールドを追加しようとする構成は、{ force: true }で実行した場合でもエラーになります。既存のノードに
newlyAddedフィールドがある場合、rs.reconfig()を使用して構成を変更してもnewlyAddedフィールドは削除されません。newlyAddedフィールドは、ユーザーが提供した構成に追加されます。replSetGetConfigは、その出力からすべてのnewlyAddedフィールドを除きます。newlyAddedフィールドを表示する場合は、local.system.replsetコレクションに直接クエリできます。
getLastErrorDefaults の削除されたカスタマイズ可能な値
MongoDB 5.0 以降では、デフォルトの { w: 1, wtimeout: 0 } 以外の settings.getLastErrorDefaults でデフォルトの書込み保証 (write concern) を指定することはできません。代わりに、setDefaultRWConcern コマンドを使用して、レプリカセットまたはシャーディングされたクラスターのデフォルトの読み取りまたは書込み保証 (write concern) を設定します。
レプリカセット書き込み確認
MongoDB 5.0 以降では、STARTUP2 状態のレプリカセット ノードは書込み (write) の過半数に参加しません。
暗黙のデフォルト書込み保証 (write concern)
MongoDB 5.0 以降、暗黙のデフォルト書込み保証 (write concern)はw: majorityです。ただし、アービタを含むレプリカセットの配置ではエッジケースがあります。
レプリカセットの投票権の過半数は、投票ノードの半数に 1 を加え、端数を切り捨てた値です。データを保持する投票ノードの数が投票の過半数を超えない場合、デフォルトの書込み保証 (write concern) は
{ w: 1 }になります。その他のすべてのシナリオでは、デフォルトの書込み保証 (write concern) は
{ w: "majority" }です。
具体的には、MongoDB では次の式を使用して、デフォルトの書込み保証 (write concern)を決定します。
if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ] defaultWriteConcern = { w: 1 } else defaultWriteConcern = { w: "majority" }
たとえば、次の配置とそれぞれのデフォルトの書込み保証 (write concern) について考えてみましょう。
Non-Arbiters | アービタ | 投票ノード | 投票ノードの過半数 | 暗黙のデフォルト書込み保証 (write concern) |
|---|---|---|---|---|
2 | 1 | 3 | 2 |
|
4 | 1 | 5 | 3 |
|
最初の例では、次のようになります。
投票ノードは合計 3 つあり、非アービタ ノードが 2 つ、アービタ ノードが 1 つです。
投票ノードの過半数(1 に 3 の半分を足し、切り捨てた値)は 2 です。
非アービタの数 (2) は、投票ノードの過半数 (2) と等しく、暗黙の書込み保証 (write concern)
{ w: 1 }になります。
2 番目の例では、次のようになります。
投票ノードは合計 5 つあり、非アービタ ノードが 4 つ、アービタ ノードが 1 つあります。
投票ノードの過半数(1 に 5 の半分を足し、切り捨てた値)は 3 です。
非アービタ数 (4) が投票ノードの過半数(3) よりも多いため、暗黙の書込み保証 (write concern)が
{ w: "majority" }になります。
{ w: "majority" } のデフォルトの書込み保証 (write concern) は、選挙時やレプリカセット ノードが使用できなくなった場合に、より強力な耐久性保証を提供します。
上限付きコレクションに関する snapshot 読み取り保証
MongoDB 5.0 以降では、上限付きコレクションから読み取るときに読み取り保証 (read concern) "snapshot" を使用できません。
local は、デフォルトの読み取り保証 (read concern) で
MongoDB 5.0 以降では、プライマリとセカンダリに対する読み取り操作のデフォルトの読み取り保証 (read concern)レベルは "local" です。In MongoDB 4.4 では、シャーディングされたクラスターのセカンダリを対象とするクエリは読み取り保証 (read concern)"available" を使用し、孤立したドキュメント を返すことができます。
これにより、フィルターを使用するカウントクエリと対象クエリのレイテンシが大幅に増加する可能性があります。
setDefaultRWConcern を使用してクラスター全体の読み取り保証 (read concern) を設定することで、この動作をオプトアウトできます。
新しい cursor.map() 戻り値の型
cursor.map()はレガシーのmongo shell でArrayを返しました。 戻り値の型は、 mongoshのCursorです。 .toArray()を使用して結果を変換できます。
演算子の変更のアップデート
MongoDB 5.0 以降では、空のオペランド式({ })で次のアップデート演算子を使用しても、mongod でエラーが発生しなくなりました。
空にアップデートしても何も変更されず、oplog エントリも作成されません(つまり、操作は実行されません)。
演算子プロセシング順序のアップデート
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
$setWindowFields トランザクションとスナップショット読み取り保証 (read concern) があるステージ
MongoDB バージョン 5.3 より前では、$setWindowFields 集計パイプライン ステージはトランザクションまたは "snapshot" 読み取り保証 (read concern) では使用できません。
集計パイプライン演算子のパラメーター制限
次の集計パイプライン演算子には、64 ビットの整数値の最大制限が設けられました。
この制限を超える値を渡すと、パイプラインは無効な引数エラーを返します。
listDatabases 出力の変更
MongoDB 5.0 以降では、mongod に対して実行される listDatabases コマンドの出力は、mongos に対して実行される listDatabases の出力でもっと整合性が取れています。
次の表は、MongoDB 5.0 と以前のバージョン間の listDatabases 出力フィールドのデータ型の違いを示しています。5.0 と以前のバージョン間で異なるフィールドのみがリストされています。
フィールド | MongoDB 5.0 の型 | MongoDB 4.4 以前( mongod)の型 | MongoDB 4.4 以前( mongos)の型 |
|---|---|---|---|
| integer | double | integer |
| integer | double | integer |
| integer | 存在しない(下記参照) | integer |
mongos または mongod に対して実行された場合、listDatabases からの出力に totalSizeMb フィールドが含まれるようになりました。MongoDB 4.4 以前では、totalSizeMb は、mongos に対して実行された場合にのみ表示されます。totalSizeMb は、sizeOnDisk フィールドの合計で、メガバイト単位で表示されます。
mongos に対して実行すると、listDatabases 出力の shards フィールドに、特定のシャード上の各コレクションのフィールド値のペアが含まれます。shards フィールドのサイズ値は整数で表されます。
セキュリティ
TLS 接続 X509 証明書のスタートアップ警告
MongoDB 5.0 以降では、証明書にサブジェクト代替名属性が含まれていない場合、mongod と mongos で起動時の警告が発せられるようになっています。
以下のプラットフォームは、コモンネームの検証をサポートしていません。
iOS 13 以降
MacOS 10.15 以降
Go 1.15 以降
これらのプラットフォームを使用するクライアントは、CommonName 属性によって指定されているホスト名の x.509 証明書を使用する MongoDB サーバーに対して認証を行いません。
Map-Reduce
MongoDB バージョン 5.0 以降、map-reduce 操作が廃止されました。
map-reduce 操作に代わる集計パイプラインの例については、「map-reduce から集計パイプラインへ」および「map-reduce の例」を参照してください。
監査
MongoDB 5.0 では、実行時に構成できる監査機能が追加されました。
auditLog.runtimeConfiguration が true に設定されている場合、mongod 構成ファイルおよび mongos 構成ファイルでは setParameter.auditAuthorizationSuccess の設定や監査フィルターの構成ができなくなります。サーバー構成ファイルにこれらの設定が含まれている場合、サーバーは起動に失敗し、エラーがログに記録されます。
auditLog.runtimeConfiguration が false に設定され、監査フィルター構成ドキュメントが存在する場合、スタートアップ警告は発行されますが、サーバーは中止されません。
シャーディングされたトランザクションにおける古いチャンクのリスク軽減
MongoDB 5.0 以降では、transactionLifetimeLimitSeconds パラメーターを変更する場合、すべてのコンフィギュレーションサーバーのレプリカセットのノードで transactionLifetimeLimitSeconds も同じ値に変更する必要があります。この値の一貫性を保つには、次の点に注意してください。
ルーティング テーブルの履歴が、少なくともシャード レプリカセット ノードのトランザクション ライフタイム制限と同じ期間保持されるよう確認します。
トランザクションの再試行頻度を減らし、パフォーマンスを向上させます。
一般的な変更点
MongoDB 5.0 以降:
featureCompatibilityVersion が
"5.0"以上に設定されている場合、ユーザーは<database>.system.viewsコレクションに直接書き込むことができなくなります。reIndexコマンドとdb.collection.reIndex()shell メソッドは、スタンドアロンインスタンスでのみ実行できます。1 つのパイプラインで許可される集計パイプラインステージの数は 1000 に制限されています。
directoryPerDBまたは--directoryperdbが有効な場合にデータベース内の最終コレクションを削除すると(またはデータベース自体を削除すると)、そのデータベースの新しく空になったサブディレクトリが削除されます。結果の値を正確に表す必要がある場合、
$subtract集計演算子により、結果のデータ型を変換できます。具体的な変換方法については$subtractを参照してください。MongoDB では、
--serviceExecutorコマンドライン オプションと対応するnet.serviceExecutor構成オプションが削除されます。--apiStrictオプションが設定されている場合、同じクライアントのセッションで複数の同時ユーザーとして認証することはできません。--apiStrictオプションが設定されている場合に、既存のユーザーとしてログインしているときに新規ユーザーとして認証しようとすると、認証の試行ごとにエラーメッセージが 1 回生成されます。--apiStrictオプションを使用していない場合、既存のユーザーとしてログインしているときに新規ユーザーとして認証すると、認証の試行ごとに 1 回警告がログに書き込まれます。重みオプションは、
$textのインデックスに対してのみ許可されます。暗黙的なデフォルトの書込み保証 (write concern) を変更する構成でシャーディングされていないレプリカセットを再構成する前に、グローバルでデフォルトの書込み保証 (write concern) を明示的に設定する必要があります。グローバルのデフォルトの書込み保証 (write concern) を設定するには、
setDefaultRWConcernコマンドを使用します。mongoshでreplSetOplogサイズを設定するには、Double()コンストラクターとreplSetResizeOplogコマンドを使用します。
非推奨
非推奨 | 説明 |
|---|---|
| レガシー |
| バージョン 4.4.1 から非推奨: 代わりに |
| バージョン 4.4.1 から非推奨: 代わりに |
| バージョン 5.0 から非推奨: 代わりに |
| バージョン 5.0 から非推奨: 代わりに |
バージョン 5.0 から非推奨: 代わりにサーバーから切断してセッションを終了してください。 | |
バージョン 5.0 から非推奨: 代わりにサーバーから切断してセッションを終了してください。 | |
ローカル監査メッセージのフィールド | バージョン 5.0 から非推奨: 代わりにclientMetadata 監査メッセージの |
廃止されたワイヤプロトコルの命令コード
MongoDB 5.0 では、次のワイヤプロトコルの命令コードが非推奨になります。
OP_REPLYOP_UPDATEOP_INSERTOP_QUERYOP_GET_MOREOP_DELETEOP_KILL_CURSORS
新しいバージョンのドライバーでは、これらの非推奨の命令コードの代わりに OP_MSG を使用します。
関連するコマンドとメソッドも MongoDB 5.0 では非推奨になっています。
getLastErrordb.getLastError()db.getLastErrorObj()
ドライバーが最新のワイヤプロトコルを使用するようにするには、ドライバーを 5.0 互換バージョンにアップグレードしてください。
getLastError、db.getLastError()、またはdb.getLastErrorObj() を明示的に使用するコードでは、代わりに CRUD API を使用して、目的の書込み保証 (write concern) で書き込みを発行する必要があります。書込み (write) 操作の成功または失敗に関する情報は、ドライバーによって戻り値として直接提供されます。
5.0 機能の互換性
5.0の一部の機能では、5.0 バイナリだけでなく、 featureCompatibilityVersion (FCV)を5.0 に設定する必要があります。これらの機能には、次のものが含まれます。
時系列コレクションを作成するには、FCV を 5.0 以上に設定する必要があります。
ランタイム監査フィルター管理を構成するには、FCV を 5.0 以上に設定する必要があります。
フィールド名で
.および$を使用するには、FCV を 5.0 以上に設定する必要があります。