MongoDB 8.0での互換性の変更
クエリ動作
「null は未定義のフィールドと一致しない」のクエリ
MongoDB 8.0以降、等価一致式で null
と比較しても、 undefined
値と一致しません。
たとえば、これらのドキュメントとクエリについて考えてみます。
// people collection [ { _id: 1, name: null }, { _id: 2, name: undefined }, { _id: 3, name: [ "Gabriel", undefined ], { _id: 4, names: [ "Alice", "Charu" ] } ]
db.people.find( { name: null } )
MongoDB 8.0より前では、上記のクエリは次のドキュメントと一致します。
name
フィールドはnull
(_id: 1
)name
フィールドはundefined
またはundefined
配列要素を含みています(_id: 2
と_id: 3
)name
フィールドは存在しません(_id: 4
)
MongoDB 8.0 以降では、上記のクエリでは、name
フィールドが undefined
であるか、 または undefined
配列要素が含まれているドキュメントは一致しません。クエリは、次の条件を満たすドキュメントのみに一致します。
name
フィールドはnull
またはnull
配列要素を含みています(_id: 1
)name
フィールドは存在しません(_id: 4
)
このクエリ動作の変更は、次の操作にも影響します。
この動作の変更を考慮してクエリを書き換える方法やデータを移行する方法については、「 未定義のデータとクエリの移行 」を参照してください。
非推奨
非推奨 | 説明 |
---|---|
LDAP | MongoDB 8.0以降、 LDAP認証と認可は非推奨です。 LDAP は使用可能であり、 MongoDB 8のサポート期間中に変更されずに動作し続けます。 LDAP は将来のメジャー リリースで削除される予定です。 詳細については、「 LDAP の廃止 」を参照してください。 LDAP移行情報は将来利用可能になる予定です。 |
ヘッジされた読み取り | MongoDB 8.0以降、ヘッジされた読み取りは非推奨です。 読み込み設定(read preference |
インデックス フィルター | バージョン8.0では非推奨 。 MongoDB 8.0以降では、インデックス フィルターを追加する 代わりに、 クエリ設定を使用します 。 インデックス フィルターは MongoDB 8.0以降非推奨です。 クエリ設定は、インデックス フィルターよりも多くの機能を持ちます。 また、インデックス フィルターは永続的ではなく、すべてのクラスター ノードに対してインデックス フィルターを簡単に作成することはできません。 クエリ設定を追加して例を探すには、 |
サーバーサイド JavaScript 関数 | MongoDB 8.0以降、サーバーサイド JavaScript 関数( |
tcmallocAggressiveMemoryDecommit | MongoDB 8.0では tcmallocAggressiveMemoryDecommit パラメータが非推奨になります。 |
enableFinerGrainedCatalogCacheRefresh | MongoDB 8.0では enableFinerGrainedCatalogCacheRefresh パラメータが非推奨になります。 |
timeField 時系列コレクション用のシャードキー内 | MongoDB 8.0 以降、時系列コレクションでシャードキーとして |
cleanupOrphaned | MongoDB 8.0では cleanupOrphaned コマンドが非推奨になります。 孤立したドキュメントが残っていないことを確認するには、代わりに$shardedDataDistribution を使用します。 |
rangePreview | MongoDB 8.0 以降、 Queryable Encryptionコレクションで |
下位互換性のない機能
シャードに直接接続してコマンドを実行することはできません
MongoDB 8.0以降では、シャードで特定のコマンドのみを実行できます。 シャードに直接接続し、サポートされていないコマンドを実行しようとすると、MongoDB はエラーを返します。
"You are connecting to a sharded cluster improperly by connecting directly to a shard. Please connect to the cluster via a router (mongos)."
サポートされていないデータベースコマンドをシャードに対して直接実行するには、 mongos
に接続するか、メンテナンス専用のdirectShardOperations
ロールが必要です。
MongoDB は、シャードに対して コマンドを直接実行できるようにすることで、レプリカセットから1シャード クラスターへのオンライン移行をサポートしています。 ただし、クラスターに複数のシャードがある場合は、リストされているコマンドのみが、メンテナンス専用のdirectShardOperations
ロールなしでシャードに対して直接実行できます。
書込み保証 (write concern) の過半数
MongoDB 8.0以降、 "majority"
書込み保証 ( 書込み保証 (write concern) ) を使用する書込み操作は、レプリカセットノードの過半数が変更のoplogエントリを書込んだときに確認応答を返します。 これにより、 "majority"
書き込みのパフォーマンスが向上します。 以前のリリースでは、これらの操作はレプリカセットの過半数が変更を適用した後、待機して確認応答を返していました。
oplogバッファ
MongoDB 8.0以降、セカンダリは各バッチの oplog エントリを並列に書込み、適用します。 これにより、 metrics.repl.buffer
ステータス メトリクスに重大な変更が導入され、1 つではなく 2 つのバッファに関する情報が提供されるようになりました。
MongoDB 8.0では、次のサーバー ステータス メトリクスが非推奨になります。
これらは、次のメトリクスに置き換えられます。
一般的な変更点
シャットダウン パフォーマンス
MongoDB 8.0以降では、 Bulk.insert()
およびデータ取り込みワークロードのパフォーマンスが向上する可能性があります。 ただし、これらのワークロードを実行した後すぐに MongoDB をシャットダウンすると、余計なデータがディスクにフラッシュされるため、時間がかかる可能性があります。
同時圧縮コマンドは許可されていない
MongoDB 8.0以降、同じコレクションに対して複数のcompact
コマンドを同時に実行しようとすると、MongoDB はエラーを返します。
地理空間入力の検証
MongoDB 8.0以降では、不正な入力を含む地理空間クエリは使用できません。 以前のバージョンでは、特定の地理空間クエリはエラーなしで不正な入力を受け入れていました。
OIDC IdP は発行者を共有できます
MongoDB 8.0以降では、複数の ID プロバイダー(IDP)が定義されている場合、 audience
値が各発行者に対して一意である限り、 oidcIdentityProviders
パラメータは重複するissuer
値を受け入れます。 これは、バージョン7.3および7でも利用できます。 0 。
serverStatus 出力の変更
MongoDB 8.0以降、 wiredTiger.concurrentTransactions
の名前はqueues.execution
に変更されます。
集計
$rank
と の動作$denseRank
MongoDB 8.0以降、 $denseRank
および$rank
sortBy操作のnull
と欠落しているフィールド値は、ランキングを計算するときに同じように扱われます。 この変更により、 denseRank
とrank
の動作が$sort
と一貫性が生じます。
$shardedDataDistribution 出力
MongoDB 以降、 は、プライマリシャードに8.0 $shardedDataDistribution
チャンク または 孤立したドキュメント がある場合にのみ、コレクションの プライマリシャード の出力を返します。
アップグレードされた TCMalloc
MongoDB 8.0以降、 MongoDBは、メモリのフラグメント化を減らし、高負荷のワークロードに対するデータベースの回復力を高めます。
より優れたパフォーマンスで新しい TCMalloc を使用するには、「自己管理型配置の TCMalloc パフォーマンスの最適化 」を参照してください。