このトピックでは、MongoDB 4.2 の互換性の変更について説明します。
MongoDB の公式の互換性変更ドキュメントを参照するには、過去のドキュメントにアクセスしてください。
MMAPv1 ストレージエンジンの削除
MongoDB 4.2 では、MMAPv1 ストレージエンジンのサポートが削除されました。
MongoDB 4.0 で MMAPv1 ストレージエンジンを使用している場合は、インスタンスを MongoDB 4.2 にアップグレードする前に、ストレージエンジンを WiredTiger に変更する必要があります。
MMAPv1 固有のオプション
MongoDB 4.2 では、次の MMAPv1 固有のオプションが削除されました。
削除されたオプション | 削除されたコマンドライン |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MongoDB 4.2 以降、上記のオプションとコマンドラインは非推奨となります。WiredTiger を使用している場合は、MMAPv1 固有のオプションを削除してください。
MMAPv1 固有のパラメーター
MongoDB 4.2 では、次の MMAPv1 固有のパラメーターが削除されました。
newCollectionsUsePowerOf2SizesreplIndexPrefetch
MMAPv1 固有のコマンド
MongoDB 4.2 では、MMAPv1 固有のコマンド touch が削除されました。
コマンドとメソッドの MMAPv1 固有のオプション
MongoDB 4.2 では、次の MMAPv1 固有のオプションが削除されました。
collModコマンドのnoPaddingおよびusePowerOf2Sizes。collStatsコマンドのverbose。createコマンドのflags。db.createCollection()コマンドのpaddingFactor、paddingBytes、およびpreservePadding。
MongoDB 4.2 は、fsync コマンドの MMAPv1 固有のオプション async を無視します。
コマンドとメソッドの削除または非推奨化
group コマンドの非推奨化グループ コマンドの説明
MongoDB 4.2 以降、group コマンド (MongoDB 3.4 で非推奨) とその mongo シェルヘルパー関数 db.collection.group() は非推奨となります。
代わりに、$group ステージと共に db.collection.aggregate() を使用してください。
eval コマンドの非推奨化eval コマンドの説明
MongoDB 4.2 以降、eval コマンド (MongoDB 3.0 で非推奨) は非推奨となります。
mongo シェルヘルパー関数 db.eval() および db.collection.copyTo() は、MongoDB 4.0 以前を実行しているインスタンスに接続している場合にのみ実行できます。
copydb コマンドと clone コマンドの非推奨化copydb コマンドと clone コマンドの機能
MongoDB 4.2 以降、copydb コマンドと clone コマンドは非推奨となります。mongo シェルヘルパー関数 db.copyDatabase() および db.cloneDatabase() は、MongoDB 4.0 以前を実行しているインスタンスに接続している場合にのみ実行できます。
代わりに、mongodump と mongorestore (mongorestore オプション --nsFrom および --nsTo と共に) を使用するか、スクリプトを記述するためのドライバーを使用してください。
たとえば、同じインスタンス上の test データベースを examples データベースにコピーするには、次の手順を実行します。
mongodumpを使用して、testデータベースをmongodump-test-dbという名前のアーカイブファイルにダンプします。mongodump --archive="mongodump-test-db" --db=test--nsFromパラメーターと--nsToパラメーターと共にmongorestoreを使用して、アーカイブファイルからデータを復元します。mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
--uri、--host、--username などのパラメーターを必要に応じて追加できます。
あるいは、アーカイブファイルを使用する代わりに、mongodump を使用して test データベースを標準出力ストリームにダンプし、それを mongorestore にパイプすることもできます。
mongodump --archive --db=test | mongorestore --archive --nsFrom='test.*' --nsTo='examples.*'parallelCollectionScan コマンドの非推奨化parallelCollectionScan コマンドの説明
MongoDB 4.2 以降、parallelCollectionScan コマンドは非推奨となります。
maxScan オプションの削除
MongoDB 4.2 以降、find コマンドと mongo シェルヘルパー関数 cursor.maxScan() から maxScan オプションが削除されました。代わりに、find コマンドの maxTimeMS オプションまたは mongo シェルメソッド cursor.maxTimeMS() を使用してください。
geoNear コマンドの非推奨化geoNear コマンドの説明
MongoDB 4.2 以降、geoNear コマンドは非推奨となります。代わりに $geoNear 集約ステージを使用してください。
$geoNear ステージでは、そのオプションは非推奨の geoNear コマンドのオプションと似ていますが、次の点が異なります。
非推奨の
geoNearコマンドの出力には、距離情報を含むdisフィールドが含まれています。$geoNearステージでは、distanceFieldに距離フィールド名を指定します。非推奨の
geoNearコマンドは、locフィールドを含めるために、includeLocsオプションにブール値を受け入れます。$geoNearステージでは、includeLocsに位置フィールド名を指定します。非推奨の
geoNearコマンドの出力には、avgDistanceとmaxDistanceが含まれています。集約パイプラインを使用して、
avgDistanceとmaxDistanceを返すことができます。具体的には、geoNearステージの後にgroupステージを含めて、avgDistanceとmaxDistanceを計算します。db.places.aggregate([ { $geoNear: { near: <...>, distanceField: "dis", includeLocs: "loc", spherical: true, ... } }, { $group: { _id: null, objectsLoaded: { $sum: 1 }, maxDistance: { $max: "$dis" }, avgDistance: { $avg: "$dis" } } } ])
repairDatabase コマンドの非推奨化repairDatabase コマンドの説明
MongoDB 4.2 以降、repairDatabase コマンド、mongo シェルヘルパー関数 db.repairDatabase()、および repairDatabase 権限は非推奨となります。
代替手段:
mongod のデータを圧縮するには、
compactコマンドを使用します。スタンドアロンインスタンスのインデックスを再構築するには、
reIndexコマンドまたはそのヘルパー関数db.collection.reIndex()を使用します。スタンドアロンインスタンスのデータを復元するには、
mongod --repairを使用します。
getPrevError コマンドの非推奨化getPrevError コマンドの説明
MongoDB 4.2 以降、getPrevError コマンドとその mongo シェルヘルパー関数 db.getPrevError() は非推奨となります。
cloneCollection コマンドの非推奨化非推奨化: コマンド
MongoDB 4.2 以降、cloneCollection コマンドとその mongo シェルヘルパー関数 db.cloneCollection() は非推奨となります。
代わりに、mongoexport コマンドと mongoimport コマンドを使用するか、スクリプトを記述するためのドライバーを使用してください。
PlanCache コマンドの廃止
MongoDB 4.2 以降、次の項目は非推奨となります。
PlanCache.getPlansByQuery()メソッドとplanCacheListPlansコマンド。シェイプのキャッシュされたクエリプランを取得するには、代わりに
$planCacheStats集約ステージを使用してください。PlanCache.listQueryShapes()メソッドとplanCacheListQueryShapesコマンド。キャッシュされたクエリシェイプを一覧表示するには、代わりに
$planCacheStats集約ステージを使用してください。
集計
$out ステージの制限
$out とビュー
ビュー定義パイプラインには、$out ステージを含めることができません。$out ステージを含む既存のビューがある場合、その既存のビューから別のビューを作成することはできません。
$out ステージを含む既存のビューの場合は、$out ステージを含まないビューを削除して再作成するか、ビュー定義を $out ステージを含まない新しいパイプラインに置き換えることができます。
$out および $lookup
$lookup ステージのネストされたフィールドに $out ステージを含めることはできません。
$out および 読み取りコンサーンレベル
$out ステージは、"linearizable" 読み取りコンサーンレベルと組み合わせて使用することはできません。
$out および explain コマンド
現在の集約パイプラインに $out ステージが含まれている場合、executionStats モードまたは allPlansExecution モードで db.collection.explain() ヘルパー関数または explain コマンドを実行することはできません。
現在の集約パイプラインに $out ステージが含まれている場合、executionStats 情報または allPlansExecution 情報を表示するには、out ステージなしで explain を実行して、前のステージの explain 出力を返します。
あるいは、$out ステージを含む集約パイプラインで、queryPlanner モードで explain を実行することもできます。
$out および「majority」 読み取りコンサーンレベル
MongoDB 4.2 以降、$out ステージを含む集約操作に "majority" 読み取りコンサーンレベルを指定できます。
$geoNear からの limit オプションと num オプションの削除
MongoDB 4.2 以降、MongoDB は $geoNear から limit オプションと num オプション、およびドキュメントのデフォルト制限 100 を削除します。$geoNear の結果を制限するには、$limit ステージと共に $geoNear ステージを使用します。
たとえば、$geoNear ステージに num オプションが含まれている次の集約サンプルは、MongoDB 4.2 では無効です。
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
distanceField: "distance",
num: 5, // 4.2 ではサポートされていません
spherical: true
}
}
])代わりに、集約コマンドを次の形式で書き直すことができます。
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
distanceField: "distance",
spherical: true
}
},
{ $limit: 5 }
])トランザクション
MongoDB 4.2 以降:
トランザクションの最初の操作として
killCursorsを指定したり、トランザクションでキャップ付きコレクションにデータを書き込むことはできません。ただし、トランザクションでキャップ付きコレクションからデータを読み取ることはできます。MongoDB は、トランザクションの合計サイズ制限 16 MB を削除します。MongoDB 4.2 は、トランザクション内のすべての書き込み操作をカプセル化するのに必要な数の oplog エントリを作成します。以前のバージョンでは、トランザクション内のすべての書き込み操作に対して単一のエントリが作成されるため、トランザクションの合計サイズ制限は 16 MB でした。
変更ストリーム
提供状況
MongoDB 4.2 以降、"majority" 読み取りコンサーンレベルでサポートされているかどうかに関係なく、変更ストリームを使用できます。
MongoDB 4.2 より前では、"majority" 読み取りコンサーンのサポートが有効になっている場合 (デフォルト) にのみ、変更ストリームを使用できました。
既定の照合順序
MongoDB 4.2 以降、明示的な照合が提供されない限り、変更ストリームは単純なバイナリ比較を使用します。MongoDB 4.2 より前では、単一のコレクション db.collection.watch() に対して作成された変更ストリームは、コレクションのデフォルトの照合を継承します。
再開トークンの変更
MongoDB 4.2 以降、変更ストリーム集約パイプラインがイベントの _id フィールドを変更した場合、変更ストリームは例外をスローします。
受信接続に必要なファイル記述子の追加
MongoDB 4.2 以降、mongod インスタンスまたは mongos インスタンスへの受信接続には、2 つのファイル記述子が必要です。MongoDB 4.2 より前では、受信接続には 1 つのファイル記述子のみが必要でした。
MongoDB 4.0 から 4.2 にアップグレードする前に、open files ulimit 設定 (-n) の値を追加する必要がある場合があります。
MongoDB ツール
FIPS モード
MongoDB 4.2 以降、MongoDB は次のプログラムから --sslFIPSMode オプションを削除します。
mongodump
mongoexport
mongofiles
mongoimport
mongorestore
mongostat
mongotop
mongod インスタンスと mongos インスタンスで FIPS モードが有効になっている場合、上記のプログラムは FIPS 準拠の接続を使用します。
拡張 JSON v2
ツール | 説明 |
bsondump | 拡張 JSON v2.0 (Canonical モード) 形式を使用します。 |
mongodump | メタデータ出力に拡張 JSON v2.0 (Canonical モード) 形式を使用します。拡張 JSON v2.0 (Canonical モードまたは Relaxed モード) 形式をサポートするには、mongorestore V4.2 以降が必要です。 説明 一般に、mongodump と mongorestore の対応するバージョンを使用します。特定のバージョンの mongodump によって作成されたデータファイルを復元するには、対応するバージョンの mongorestore を使用します。 |
mongoexport | デフォルトでは、拡張 JSON v2.0 (Relaxed モード) 形式で出力データを生成します。
|
mongoimport | デフォルトでは、インポートされるデータが拡張 JSON v2.0 (Canonical モードまたは Relaxed モード) 形式であると想定します。
説明 一般に、mongoexport と mongoimport のバージョンは一致している必要があります。mongoexport によって作成されたデータをインポートするには、対応するバージョンの mongoimport を使用します。 |
--query オプション
MongoDB 4.2 以降、mongodump および mongoexport の --query オプションは、フィールド名と演算子を引用符で囲むなど、拡張 JSON v2 形式 (Relaxed モードまたは Strict モード) である必要があります。例:
mongoexport -d=test -c=records -q='{ "a": { "$gte": 3 }, "date": { "$lt": { "$date": "2016-01-01T00:00:00.000Z" } } }' --out=exportdir/myRecords.jsonMongoDB 4.2 より前では、--query オプションは、フィールド名と演算子を引用符で囲む必要がない拡張 JSON v1 形式を使用します。
mongoexport -d=test -c=records -q='{ a: { $gte: 3 }, date: { $lt: { "$date": "2016-01-01T00:00:00.000Z" } } }' --out=exportdir/myRecords.jsonレプリカセットの状態変更
プライマリ ステップダウン
MongoDB 4.2 以降、replSetStepDown (またはステップダウンを引き起こす replSetReconfig) は、すべてのクライアント接続を閉じなくなりました。ただし、まだ進行中の書き込みは強制終了されます。
MongoDB 4.0 より前では、replSetStepDown はステップダウン中にすべてのクライアント接続を閉じます。
ロールバック状態
MongoDB 4.2 以降、MongoDB はメンバーが ROLLBACK 状態になると、すべてのユーザー操作を強制終了します。
MongoDB 4.2 互換ドライバーでデフォルトで有効になっている再試行可能な書き込みMongoDB 4.2 互換ドライバーでデフォルトで有効になっている再試行可能な書き込み
MongoDB 3.6 以降、MongoDB は再試行可能な書き込みをサポートしていますが、ほとんどの公式 MongoDB 3.6 および 4.0 互換ドライバーでは、この機能はデフォルトで無効になっています。これらのドライバーでは、接続文字列で retryWrites=true オプションを指定することで、接続に対して再試行可能な書き込みを有効にできます。
公式 MongoDB 4.2 以降の互換ドライバーでは、再試行可能な書き込みがデフォルトで有効になっています。再試行可能な書き込みを必要とする MongoDB 4.2 互換ドライバーにアップグレードされたアプリケーションでは、retryWrites=true オプションを省略できます。再試行可能な書き込みを無効にするには、接続文字列に retryWrites=false オプションを含める必要があります。
local データベースは、再試行可能な書き込みをサポートしていません。local データベースにデータを書き込むアプリケーションは、再試行可能な書き込みが明示的に無効にされていない限り、MongoDB 4.2 互換ドライバーにアップグレードすると書き込みエラーが発生します。
一般的な変更
インデックス
reIndex コマンドの制限
MongoDB 4.2 以降、MongoDB は reIndex コマンドまたは db.collection.reIndex() 関数により厳しい制限を課し、mongos での reIndex および db.collection.reIndex() を許可しません。
db.collection.dropIndex() の制限
db.collection.dropIndex() を使用して、_id 以外のすべてのインデックスを削除することはできません。代わりに db.collection.dropIndexes() を使用してください。
重複するインデックスを作成しようとした場合のエラー メッセージ
MongoDB 4.2 以降、createIndexes コマンドと mongo シェルヘルパー関数 db.collection.createIndex() および db.collection.createIndexes() は、ある名前でインデックスを作成し、次に別の名前で同じインデックスを再度作成しようとすると、エラーを返します。
{
"ok" : 0,
"errmsg" : "Index with name: x_1 already exists with a different name",
"code" : 85,
"codeName" : "IndexOptionsConflict"
}MongoDB 4.0 以前のバージョンでこの操作を実行した場合、MongoDB はインデックスを再度作成しませんが、次の情報を含むメッセージを返します。
{
"numIndexesBefore" : 2,
"numIndexesAfter" : 2,
"note" : "all indexes already exist",
"ok" : 1
}PowerPC 上のハッシュインデックス
ハッシュインデックスの場合、MongoDB 4.2 は、PowerPC での浮動小数点値 263 のハッシュ値が他のプラットフォームと一致するようにします。MongoDB 4.2 より前では、PowerPC での浮動小数点値 263 のハッシュ値は他のプラットフォームと一致していませんでした。
インデックス付きフィールドに 253 より大きい浮動小数点値を持つハッシュインデックスはサポートされていない設定ですが、クライアントはインデックス付きフィールドの値が 263 であるドキュメントを挿入できます。
PowerPC で MongoDB 4.0 を実行しているシャードクラスターインスタンスのシャードキーのハッシュ値が 263 の場合、インスタンスを MongoDB 4.2 にアップグレードする前に、追加の考慮事項が必要です。
min()/max()
MongoDB 4.2 以降、db.collection.find() 操作に min()/max() を指定する場合、find() クエリが _id フィールド { _id: } に対する等価条件でない限り、min()/max() のインデックスを明示的に指定する必要があります。
同様に、find コマンドで min/max を指定する場合、min/max インデックスのヒントも明示的に指定する必要があります。
MongoDB 4.0 より前では、クエリ条件に関係なく、min()/max() インデックスを明示的に指定するかどうかを選択できます。MongoDB 4.0 以前のバージョンでヒントを明示的に指定しない場合、MongoDB はインデックスの境界に基づいてインデックスを選択します。ただし、同じフィールドに複数のインデックスが存在するが、ソート順が異なる場合、インデックスの選択があいまいになる可能性があります。
CurrentOp
"getmore" 操作を報告する場合、$currentOp 集約ステージ、currentOp コマンド、および db.currentOp() は、新しい cursor フィールドのネストされたフィールドとして originatingCommand フィールドを返すようになりました。MongoDB 4.2 より前では、originatingCommand は "getmore" ドキュメントのトップレベルフィールドです。
サーバーの状態
serverStatus および db.serverStatus によって返される opcounters メトリックと opcountersRepl メトリックは、32 ビット整数 (NumberInt) ではなく 64 ビット整数 (NumberLong) になりました。
ログ記録
syslog にログを記録する場合、メッセージテキスト形式にコンポーネント情報が含まれるようになりました。例:
... ACCESS [repl writer worker 5] roles コレクションへのサポートされていない変更 ...MongoDB 4.2 より前のバージョンでは、syslog メッセージテキストにコンポーネント情報は含まれていませんでした。例:
... [repl writer worker 1] roles コレクションへのサポートされていない変更 ...MongoDB 4.2 以降、ログ取得コマンドは 1,024 文字を超えるイベントを切り捨てます。MongoDB 4.2 より前のバージョンでは、コマンドは 512 文字後に切り捨てられます。
MongoDB 4.2 以降、MongoDB はデバッグログレベルを記録します。たとえば、ログレベルが 2 の場合、MongoDB は D2 を記録します。
MongoDB 4.2 より前では、MongoDB ログメッセージはデバッグレベルとして D のみ指定していました。
ワイヤプロトコル
MongoDB 4.2 以降、MongoDB は OP_COMMAND および対応する OP_COMMANDREPLY 書き込みプロトコルをサポートしなくなりました。
Killcursors の変更点
トランザクション
MongoDB 4.2 以降では、トランザクションの最初の操作として killCursors を指定することはできません。
権限
MongoDB 4.2 以降、killCursors 権限を持っているかどうかに関係なく、常にカーソルを終了できます。したがって、killCursors 権限は MongoDB 4.2 以降のバージョンでは有効ではなくなりました。
MongoDB 3.6.3 から 4.0.x では、アクセス制御が有効になっている場合、カーソルを終了するには killCursors 権限が必要です。
AsyncRequestsSenderUseBaton パラメーターの削除
MongoDB 4.2 以降、MongoDB は AsyncRequestsSenderUseBaton パラメーターを削除し、このパラメーターによって制御されるパフォーマンスの向上を常に有効にします。
カウント構文のより厳密な検証
MongoDB 4.2 以降、MongoDB は count コマンドのオプション名のより厳密な検証を実装します。不明なオプション名が指定されている場合、コマンドはエラーを報告します。
MongoDB 4.2 より前では、MongoDB は無効なオプション名を無視します。
因果整合性セッション
MongoDB 4.2 以降、次のコマンドは afterClusterTime をサポートしなくなりました。
dbHashコマンドmapReduceコマンドvalidateコマンド
したがって、これらの操作を因果的に一貫性のあるセッションに関連付けることはできません。
fastmodinsert メトリックの削除
MongoDB 4.2 は、非推奨の fastmodinsert メトリックを、explain executionStats やプロファイラー出力などのさまざまな出力から削除します。
MapReduce
MongoDB 4.2 以降、MongoDB は次の項目を非推奨とします。
シャードコレクションを作成するための
map-reduceオプション、および map-reduce での sharded オプションの使用のサポート。シャードコレクションに出力するには、最初にシャードコレクションを作成します。MongoDB 4.2 は、既存のシャードコレクションの置き換えも非推奨とします。map-reduce の
nonAtomic: falseオプションの明示的な指定。
バランサーのステータスと自動分割
MongoDB 4.2 以降:
balancerStartコマンドと mongo シェルヘルパーメソッドsh.startBalancer()およびsh.setBalancerState(true)も自動分割を有効にします。自動分割を無効にするには、
sh.disableAutoSplit()を使用します。balancerStopコマンドと mongo シェルヘルパーメソッドsh.stopBalancer()およびsh.setBalancerState(false)も自動分割を無効にします。自動分割を有効にするには、
sh.enableAutoSplit()を使用します。
sh.enableBalancing(namespace) メソッドと sh.disableBalancing(namespace) メソッドは、自動分割に影響を与えなくなりました。
診断レポートのロック
MongoDB 4.2 以降、MongoDB は ReplicationStateTransition ロックに関する情報を報告します。
さらに、MongoDB 4.2 は ParallelBatchWriterMode ロック情報をグローバルロック情報から分離します。以前のバージョンでは、ParallelBatchWriterMode ロック情報はグローバルロック情報の一部として報告されます。
ロック情報を報告する操作については、以下を参照してください。
serverStatusコマンドとdb.serverStatus()メソッド。$currentOp集約パイプラインステージ、currentOpコマンド、およびdb.currentOp()メソッド。
findAndModify のクエリ、ソート、または投影引数の検証findAndModify のクエリ、ソート、またはプロジェクション引数の検証
MongoDB 4.2 以降 (V4.0.12+ および 3.6.14+ を含む)、findAndModify コマンドとその関連 mongo シェルメソッドは、指定されたクエリ、ソート、または投影引数がドキュメントでない場合にエラーを報告します。
MongoDB 4.2 より前では、現在の操作はドキュメントではないクエリまたはソート引数を空のドキュメント {} と見なします。
DropDatabase と movePrimary
MongoDB 4.2 以降:
データベースを削除し、同じ名前で別のデータベースを作成する場合、次のいずれかの操作を実行する必要があります。
すべての mongos インスタンスとシャードメンバーを再起動するか、
作成されたデータベースの読み取りまたは書き込みを行う前に、すべての mongos インスタンスとシャードメンバーで
flushRouterConfigコマンドを実行します。
movePrimary コマンドを使用して非シャードコレクションを移動する場合、次のいずれかの操作を実行する必要があります。
すべての mongos インスタンスとシャードメンバーを再起動するか、
それらのコレクションの読み取りまたは書き込みを行う前に、すべての mongos インスタンスとシャードメンバーで
flushRouterConfigコマンドを実行します。
これにより、mongos とシャードメンバーがメタデータキャッシュをフラッシュすることが保証されます。そうしないと、読み取りでデータが見つからない場合や、書き込みが正しいシャードに送られない場合があります。復元には手動による介入が必要です。
MongoDB 4.2 より前では、mongos インスタンスを再起動するか、mongos インスタンスで flushRouterConfig コマンドを実行するだけで済みます。
system.indexes コレクションと system.namespaces コレクションの削除system.indexes コレクションと system.namespaces コレクションの削除
MongoDB 4.2 以降、MongoDB は system.indexes コレクションと system.namespaces コレクション (MongoDB 3.0 で非推奨) を削除します。
これらのコレクションが削除されると、組み込みロール clusterManager、clusterMonitor、dbAdmin、read、restore、およびこれらのロールから継承するその他のロールには、system.indexes コレクションと system.namespaces コレクションにアクセスする権限が付与されなくなります。
アービタをダウングレードするためのデータディレクトリのクリアの必要性
MongoDB 4.2 の arbiter データファイルは、MongoDB 4.0 と互換性がありません。MongoDB 4.2 から 4.0 にダウングレードするには、最初に arbiter データファイルを削除します。MongoDB 4.2 のデータファイルを使用して MongoDB 4.0 で arbiter を実行すると、エラーが発生する可能性があります。
シャードコレクションとドキュメントの置き換え
MongoDB 4.2 以降:
replaceOne()やupdate()(置換ドキュメントと共に使用する場合) などのドキュメント置換操作は、最初にクエリフィルターを使用してシャードを見つけようとします。操作でクエリフィルターを使用してシャードを見つけることができない場合、置換ドキュメントを使用しようとします。MongoDB 4.2 より前では、ドキュメント置換操作は置換ドキュメントのみを使用してシャードを見つけようとします。MongoDB は
save()メソッドを非推奨とします。insertOne()メソッドまたはreplaceOne()メソッドを代わりに使用してください。save()メソッドは、_id以外でシャーディングされたシャーディングコレクションでは使用できません。save()メソッドを使用すると、エラーが発生します。シャードコレクションで
upsert: true設定のドキュメント置換操作の場合、フィルターにはシャードコレクションのシャードキーに対する等価一致を含める必要があります。
MongoDB 4.2 機能互換性
MongoDB 4.2 の一部の機能では、4.2 バイナリだけでなく、機能互換性バージョン (fCV) を 4.2 に設定する必要があります。機能:
分散トランザクション。
fCV が 4.2+ に設定されている MongoDB バージョンのインデックスキーの長さ制限の削除。さらに、
failIndexKeyTooLongパラメーターは、fCV が 4.2+ に設定されている MongoDB バージョンには影響がなく、MongoDB バージョン 2.6 から 4.0 にのみ適用されます。fCV が 4.2+ に設定されている MongoDB バージョンのインデックス名の長さ制限の削除。
一意なインデックスの新しい内部形式。この新しい形式は、既存のすべての一意なインデックスと、新しく作成または再構築された一意なインデックスに適用されます。
MongoDB 4.2 以降、
type:0をexists:falseの同義語として使用できなくなりました。MongoDB 4.2 は、カスタムフィールドをクエリするワークロードや、コレクションにさまざまなフィールドが存在するワークロードをサポートするために、ワイルドカードインデックスを追加します。