Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

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 シェルヘルパー メソッドが排除されます。

削除されたコマンド
代替
db.collection.copyTo()
db.collection.save()
なし
Mongo.getSecondaryOk()
Mongo.isCausalConsistency
なし
Mongo.setSecondaryOk()
rs.secondaryOk()
なし
なし

MongoDB 5.0 では、次のサーバーパラメーターが除かれます。

削除されたパラメーター
説明
cachePressureThreshold
MongoDB 5.0 では、cachePressureThreshold サーバーパラメーターが除かれます。WiredTiger がスナップショットのウィンドウサイズを計算する方法が変更されたため、このパラメーターは関連性がなくなりました。
shouldMultiDocTxnCreateCollectionAndIndexes
MongoDB 5.0 では、shouldMultiDocTxnCreateCollectionAndIndexes サーバーパラメーターが除かれます。5.0 以降では、トランザクション内でのコレクションとインデックスの作成は常に有効になっています。この動作を無効にするためにサーバーパラメーターを使用することはできなくなりました。
connPoolMaxShardedConnsPerHost
MongoDB 5.0 では、connPoolMaxShardedConnsPerHost サーバー パラメーターが削除されました。
connPoolMaxShardedInUseConnsPerHost
MongoDB 5.0 では、connPoolMaxShardedInUseConnsPerHost サーバー パラメーターが削除されました。
shardedConnPoolIdleTimeoutMinutes
MongoDB 5.0 では、shardedConnPoolIdleTimeoutMinutes サーバー パラメーターが削除されました。

MongoDB 5.0 では、非推奨の geoHaystack インデックスが除かれます。代わりに 2D インデックスを使用します。

MongoDB インスタンスを 5.0 にアップグレードし、featureCompatibilityVersion5.0 に設定すると、既存の geoHaystack インデックスがすべて削除されます。

MongoDB 5.0 以降、serverStatus コマンドは、クエリ操作で指定された読み取り保証 (read concern) レベルを含む、opReadConcernCounters を出力しません。代わりに、新しい readConcernCountersopReadConcernCounters に置き換わり、追加情報が含まれます。

MongoDB 5.0 以降では、serverStatus コマンドは wiredTiger.snapshot-window-settings の下で cache pressure percentage thresholdcurrent cache pressure percentage を出力しません。

MongoDB 5.0 以降では、$currentOp.remainingOperationTimeEstimated メトリクスは、再シャーディング操作が行われているときにのみ受信者シャードに存在します。

MongoDB 5.0 では Raspberry Pi のサポートが除かれます。Raspberry Pi で MongoDB を実行するには、バージョン 4.4 をインストールします。

MongoDB 5.0 以降では、expireAfterSecondsNaN に設定された TTL インデックスの動作が以前のバージョンと比べて変更されます

動作の変更は以下に影響します。

  • 直接のアップグレード

  • 以前のバージョンからの最初の同期

  • mongorestore 以前のバージョンから

これらのアクションのいずれかを実行すると、NaNexpireAfterSeconds の値が 0expireAfterSeconds として扱われます。その結果、ドキュメントはすぐに期限切れになる可能性があります。

MongoDB 5.0.14 (および 6.0.2) 以降では、サーバーは expireAfterSecondsNaN に設定されている TTL インデックスを使用しません。

MongoDB v 5.0ではmongo shell は非推奨になりました。 置き換え shell はmongoshです。

MongoDB v 5.0 ではshellのパッケージも変更されています。詳細については、「インストール手順」を参照してください。

MongoDB 5.0 以降では、ストレージエンジンの改善により、enableMajorityReadConcern--enableMajorityReadConcern は変更できなくなり、常にtrue に設定されています。

MongoDB の以前のバージョンでは、enableMajorityReadConcern--enableMajorityReadConcern を構成可能であり、これらを false に設定して、ストレージ キャッシュの負荷が 3 つのノードからなるプライマリとセカンダリのアービタ(PSA)アーキテクチャで配置が固定されないようにできます。

3 ノードのプライマリセカンダリアービタ(PSA)アーキテクチャを使用している場合は、次の点を考慮してください。

MongoDB 5.0 以降では、secondaryDelaySecsslaveDelayに置き換えられます。この変更は後方互換性がありません。

スプリットホライズンDNS のクラスター ノードを構成する方法 では、IP アドレスの代わりにホスト名を使用します。

MongoDB v5.0 以降の replSetInitiatereplSetReconfig では、ホスト名の代わりに IP アドレスを使用する設定は拒否します。

ホスト名を使用するように更新できないノードを変更するには、disableSplitHorizonIPCheck を使用します。このパラメーターはコンフィギュレーション コマンドにのみ適用されます。

mongodmongosは起動時の検証に関してdisableSplitHorizonIPCheckに依存しません。 ホスト名の代わりに IP アドレスを使用する従来のmongodおよびmongosインスタンスは、アップグレード後に起動できます。

IP アドレスで設定されたインスタンスでは、IP アドレスの代わりにホスト名を使用するように警告がログに記録されます。

MongoDB 5.0 以降では、次の読み取り保証(read concern)とオプションのある config.transactions コレクションでは非トランザクションは読み取れません。

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 コレクションに直接クエリできます。

MongoDB 5.0 以降では、デフォルトの { w: 1, wtimeout: 0 } 以外の settings.getLastErrorDefaults でデフォルトの書込み保証 (write concern) を指定することはできません。代わりに、setDefaultRWConcern コマンドを使用して、レプリカセットまたはシャーディングされたクラスターのデフォルトの読み取りまたは書込み保証 (write concern) を設定します。

MongoDB 5.0 以降では、STARTUP2 状態のレプリカセット ノードは書込み (write) の過半数に参加しません。

Tip

以下も参照してください。

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
{ w: 1 }
4
1
5
3
{ w: "majority" }
  • 最初の例では、次のようになります。

    • 投票ノードは合計 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) は、選挙時やレプリカセット ノードが使用できなくなった場合に、より強力な耐久性保証を提供します。

MongoDB 5.0 以降では、上限付きコレクションから読み取るときに読み取り保証 (read concern) "snapshot" を使用できません。

MongoDB 5.0 以降では、プライマリとセカンダリに対する読み取り操作のデフォルトの読み取り保証 (read concern) レベルは "local" です。

これにより、フィルターを使用するカウントクエリと対象クエリのレイテンシが大幅に増加する可能性があります。

setDefaultRWConcern を使用してクラスター全体の読み取り保証 (read concern) を設定することで、この動作をオプトアウトできます。

cursor.map()はレガシーのmongo shell でArrayを返しました。 戻り値の型は、 mongoshCursorです。 .toArray()を使用して結果を変換できます。

MongoDB 5.0 以降では、空のオペランド式({ })で次のアップデート演算子を使用しても、mongod でエラーが発生しなくなりました。

空にアップデートしても何も変更されず、oplog エントリも作成されません(つまり、操作は実行されません)。

MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。

MongoDB バージョン 5.3 より前では、$setWindowFields 集計パイプライン ステージはトランザクションまたは "snapshot" 読み取り保証 (read concern) では使用できません。

次の集計パイプライン演算子には、64 ビットの整数値の最大制限が設けられました。

この制限を超える値を渡すと、パイプラインは無効な引数エラーを返します。

MongoDB 5.0 以降では、mongod に対して実行される listDatabases コマンドの出力は、mongos に対して実行される listDatabases の出力でもっと整合性が取れています。

次の表は、MongoDB 5.0 と以前のバージョン間の listDatabases 出力フィールドのデータ型の違いを示しています。5.0 と以前のバージョン間で異なるフィールドのみがリストされています。

フィールド
MongoDB 5.0 の型
MongoDB 4.4 以前(mongod)の型
MongoDB 4.4 以前(mongos)の型
sizeOnDisk
integer
double
integer
totalSize
integer
double
integer
totalSizeMb
integer
存在しない(下記参照)
integer

mongos または mongod に対して実行された場合、listDatabases からの出力に totalSizeMb フィールドが含まれるようになりました。MongoDB 4.4 以前では、totalSizeMb は、mongos に対して実行された場合にのみ表示されます。totalSizeMb は、sizeOnDisk フィールドの合計で、メガバイト単位で表示されます。

mongos に対して実行すると、listDatabases 出力の shards フィールドに、特定のシャード上の各コレクションのフィールド値のペアが含まれます。shards フィールドのサイズ値は整数で表されます。

MongoDB 5.0 以降では、証明書にサブジェクト代替名属性が含まれていない場合、mongodmongos で起動時の警告が発せられるようになっています。

以下のプラットフォームは、コモンネームの検証をサポートしていません。

  • iOS 13 以降

  • MacOS 10.15 以降

  • Go 1.15 以降

これらのプラットフォームを使用するクライアントは、CommonName 属性によって指定されているホスト名の x.509 証明書を使用する MongoDB サーバーに対して認証を行いません。

MongoDB バージョン 5.0 以降、map-reduce 操作が廃止されました。

map-reduce 操作に代わる集計パイプラインの例については、「map-reduce から集計パイプラインへ」および「map-reduce の例」を参照してください。

MongoDB 5.0 では、実行時に構成できる監査機能が追加されました。

auditLog.runtimeConfigurationtrue に設定されている場合、mongod 構成ファイルおよび mongos 構成ファイルでは setParameter.auditAuthorizationSuccess の設定や監査フィルターの構成ができなくなります。サーバー構成ファイルにこれらの設定が含まれている場合、サーバーは起動に失敗し、エラーがログに記録されます。

auditLog.runtimeConfigurationfalse に設定され、監査フィルター構成ドキュメントが存在する場合、スタートアップ警告は発行されますが、サーバーは中止されません。

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 コマンドを使用します。

  • mongoshreplSetOplogサイズを設定するには、 Double()コンストラクターとreplSetResizeOplogコマンドを使用します。

非推奨
説明
mongo
レガシーmongo shell は MongoDB v 5.0で非推奨になりました。 代替はmongoshです。
db.printSlaveReplicationInfo()

バージョン 4.4.1 から非推奨: 代わりに db.printSecondaryReplicationInfo() を使用してください。

rs.printSlaveReplicationInfo()

バージョン 4.4.1 から非推奨: 代わりに rs.printSecondaryReplicationInfo() を使用してください。

バージョン 5.0 から非推奨: 代わりにsecurity.clusterIpSourceAllowlist を使用してください。
バージョン 5.0 から非推奨: 代わりに--clusterIpSourceAllowlist を使用してください。
バージョン 5.0 から非推奨: 代わりにサーバーから切断してセッションを終了してください。
バージョン 5.0 から非推奨: 代わりにサーバーから切断してセッションを終了してください。
ローカル監査メッセージのフィールド
バージョン 5.0 から非推奨: 代わりにclientMetadata 監査メッセージの localEndpoint フィールドを使用してください。

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 互換バージョンにアップグレードしてください。

getLastErrordb.getLastError()、またはdb.getLastErrorObj() を明示的に使用するコードでは、代わりに CRUD API を使用して、目的の書込み保証 (write concern) で書き込みを発行する必要があります。書込み (write) 操作の成功または失敗に関する情報は、ドライバーによって戻り値として直接提供されます。

5.0 の一部の機能では、5.0 バイナリだけでなく、featureCompatibilityVersion(FCV)を 5.0 に設定する必要があります。これらの機能には、次のものが含まれます。

戻る

5.0