MongoDB 5.0 での互換性の変更
項目一覧
- 一部のコマンドは、認識されたパラメーターのみを受け入れ
- 削除されたコマンド
- 削除されたパラメーター
- 削除されたインデックスの型
- 削除されたメトリクス
- 削除された Raspberry Pi サポート
NaN
に設定した場合のexpireAfterSeconds
TTL 動作- shell の変更
- レプリカセット
- 上限付きコレクションに関する
snapshot
読み取り保証 (read concern) local
は、デフォルトの読み取り保証 (read concern) で- 新しい
cursor.map()
戻り値の型 - 演算子の変更のアップデート
$setWindowFields
トランザクションとスナップショット読み取り保証 (read concern) があるステージ- 集計パイプライン演算子のパラメーター制限
listDatabases
出力の変更- セキュリティ
- Map-Reduce
- 監査
- シャーディングされたトランザクションにおける古いチャンクのリスク軽減
- 一般的な変更点
- 5.0 機能の互換性
次の 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"
です。
これにより、フィルターを使用するカウントクエリと対象クエリのレイテンシが大幅に増加する可能性があります。
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_REPLY
OP_UPDATE
OP_INSERT
OP_QUERY
OP_GET_MORE
OP_DELETE
OP_KILL_CURSORS
新しいバージョンのドライバーでは、これらの非推奨の命令コードの代わりに OP_MSG を使用します。
関連するコマンドとメソッドも MongoDB 5.0 では非推奨になっています。
getLastError
db.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 以上に設定する必要があります。コレクションを再シャーディングするには、FCV を 5.0 以上に設定する必要があります。