MongoDB 4.0 での互換性の変更

<!-- マニュアルっぽいので「ですます」で -->
<!-- 他のマニュアルを参照する場合、どちらかというと英語タイトルそのままで。文章の一部になっていて、訳さないと変な場合は日本語に訳す。 -->
<!-- NOTE: とかの囲みは、QiitaのMDで対応するものがなさそうなので、注意：brなどとしてごまかす？ ```text: かと思ったがそうすると中身のMD記法が解釈されない。divかと思ったがQiitaはstyle属性適用されない。divで囲んでタイトルはstrong、中身は自前でタグを書くのが見た目的には一番マシっぽい。 -->
<!-- SEE ALSO: は参照：、WARNING: は警告： -->
<!-- 英単語・数字の周りに空白をいれるか？ -->
<!-- restの`、``と、Qiita Markdownの対応は？ -->
<!-- credentials 資格情報？ -->
[Compatibility Changes in MongoDB 4.0](https://docs.mongodb.com/manual/release-notes/4.0-compatibility/)の翻訳です。
原文はMongoDB Documentation Teamによるものです。ライセンスは[CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/deed.ja)となっています。

----------

# MongoDB 4.0 での互換性の変更

以下の4.0での変更は、以前のバージョンのMongoDBとの互換性に影響する可能性があります。

## `MONGODB-CR`の削除

バージョン4.0では、以前から非推奨だった認証メカニズムMongoDB Challenge-Response (`MONGODB-CR`)を削除しました。

バージョン3.0以降は、2.6以前からのアップグレードでない限り、`MONGODB-CR`のユーザー新規作成はサポートしていませんでした。

あなたの環境において、MONGODB-CRスキーマの中にユーザーの資格情報が格納されている場合、バージョン4.0にアップグレードする前に[Salted Challenge Response Authentication Mechanism(SCRAM)](https://docs.mongodb.com/manual/core/security-scram/#authentication-scram)にアップグレードする必要があります。`SCRAM`にアップグレードするための情報は、[SCRAMへのアップグレード](https://docs.mongodb.com/manual/release-notes/3.0-scram/)を参照してください。

### `authSchemaUpgrade`コマンドの削除

MongoDB 4.0では`authSchemaUpgrade`コマンドが削除されました。
このコマンドはMongoDB 3.0から3.6までに存在し、`MONGODB-CR`のユーザーを`SCRAM`のユーザーにアップグレードする処理をサポートしていました。

あなたの環境において、MONGODB-CRスキーマの中にユーザーの資格情報が格納されている場合、バージョン4.0にアップグレードする前に[Salted Challenge Response Authentication Mechanism(SCRAM)](https://docs.mongodb.com/manual/core/security-scram/#authentication-scram)にアップグレードする必要があります。`SCRAM`にアップグレードするための情報は、[SCRAMへのアップグレード](https://docs.mongodb.com/manual/release-notes/3.0-scram/)を参照してください。

### `db.copyDatabase()`と`copydb`における`MONGODB-CR`の削除

[db.copyDatabase()](https://docs.mongodb.com/manual/reference/method/db.copyDatabase/#db.copyDatabase)メソッドは、`MONGODB-CR`を強制する[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスからはコピーすることができません。

[copydb](https://docs.mongodb.com/manual/reference/command/copydb/#dbcmd.copydb)コマンドは、`MONGODB-CR`を強制する[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスからはコピーすることができません。さらにこの変更にともなって、MongoDB 4.0では`copydbgetnonce`コマンドは削除されました。

## MMAPv1非推奨化

バージョン4.0から、[MMAPv1ストレージエンジン](https://docs.mongodb.com/manual/core/mmapv1/#storage-mmapv1)は非推奨となりました。

MMAPv1ストレージエンジンの環境をWiredTigerストレージエンジンに変更する場合は、以下を参照してください。

- [Change Standalone to WiredTiger](https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/)

- [Change Replica Set to WiredTiger](https://docs.mongodb.com/manual/tutorial/change-replica-set-wiredtiger/)

- [Change Sharded Cluster to WiredTiger](https://docs.mongodb.com/manual/tutorial/change-sharded-cluster-wiredtiger/)

## x.509認証の証明書の制限

4.0以降、x.509認証を使っていて`--sslAllowInvalidCertificates`または`ssl.allowInvalidCertificates: true`を指定している場合、無効な証明書は、TLS/SSL接続を確立することはできますが、認証を行うことはできません。

x.509認証において、無効な証明書を使っている場合、有効なものに更新してください。
たとえば、既存の証明書に対して信頼済みCAで署名したり、カスタムCAを使っている場合はそのCAを[net.ssl.CAFile](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.CAFile)で指定したりするなどです。

## レプリカセット

### レプリカセットで`pv0`の廃止

4.0では、すでに非推奨であったレプリカセットのprotocol version 0 `pv0` が廃止されました。

MongoDB 4.0にアップグレードする前に、[pv1](https://docs.mongodb.com/manual/reference/replica-configuration/#rsconf.protocolVersion)にアップグレードする必要があります。

`pv1`にアップグレードするには、mongoシェルでレプリカセットのプライマリに接続し、以下の手順を行ってください。

```javascript
cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);
```

[w:1](https://docs.mongodb.com/manual/reference/write-concern/#writeconcern.%3Cnumber%3E)を指定している場合のロールバックの可能性を減らすために、レプリカセットで[setting.catchUpTimeoutMillis](https://docs.mongodb.com/manual/reference/replica-configuration/#rsconf.settings.catchUpTimeoutMillis)の設定を大きく再設定することもできます。

`pv1`について詳細は、[Replica Set Protocol Version](https://docs.mongodb.com/manual/reference/replica-set-protocol-versions/)を参照してください。

### マスタースレーブレプリケーションの廃止

MongoDB 4.0では、すでに非推奨であったマスタースレーブレプリケーションが廃止されました。MongoDB 4.0にアップグレードする前に、あなたの環境でマスタースレーブレプリケーションを使っている場合は、レプリカセットをアップグレードする必要があります。

マスタースレーブレプリケーションを変換するには、[Convert a Master-Slave Deployment to a Replica Set](https://docs.mongodb.com/manual/core/master-slave/#convert-master-slave-to-replica-set)を参照してください。

### ジャーナリングとレプリカセット

MongoDB 4.0以降では、WiredTigerストレージエンジンを使っているレプリカセットメンバーに対して[--nojournal](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-nojournal)オプションや[storage.journal.enabled: false](https://docs.mongodb.com/manual/reference/configuration-options/#storage.journal.enabled)を指定することはできません。

### インデックスの構築とレプリカセット

[--noIndexBuildRetry](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-noindexbuildretry)や[storage.indexBuildRetry](https://docs.mongodb.com/manual/reference/configuration-options/#storage.indexBuildRetry)と、[--replSet](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-replset)や[replication.replSetName](https://docs.mongodb.com/manual/reference/configuration-options/#replication.replSetName)をともに指定することはできません。
つまりこれは、レプリカセット内の[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスに対して[--noIndexBuildRetry](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-noindexbuildretry)や[storage.indexBuildRetry](https://docs.mongodb.com/manual/reference/configuration-options/#storage.indexBuildRetry)は使えないということです。

### ロールバックに関する制約

MongoDB 4.0では、[ロールバック](https://docs.mongodb.com/manual/core/replica-set-rollbacks/)の可能性のあるデータ量に関する制約が無くなりました。以前のバージョンでは、ある[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスは300メガバイト以上はロールバックせず、300メガバイト以上ロールバックの必要が生じた場合は手動での操作が必要でした。

## シャードクラスタ

以下のシャードクラスタのメタデータに影響するオペレーションに対して、[mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos)は["majority"](https://docs.mongodb.com/manual/reference/write-concern/#writeconcern.%22majority%22)を使用します。

| Command | Method | Note |
|:--------|:-------|:-----|
| [addShard](https://docs.mongodb.com/manual/reference/command/addShard/#dbcmd.addShard) | [sh.addShard()](https://docs.mongodb.com/manual/reference/method/sh.addShard/#sh.addShard) | |
| [create](https://docs.mongodb.com/manual/reference/command/create/#dbcmd.create) | [db.createCollection()](https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection) | |
| [drop](https://docs.mongodb.com/manual/reference/command/drop/#dbcmd.drop) | [db.collection.drop()](https://docs.mongodb.com/manual/reference/method/db.collection.drop/#db.collection.drop) | |
| [dropDatabase](https://docs.mongodb.com/manual/reference/command/dropDatabase/#dbcmd.dropDatabase) | [db.dropDatabase()](https://docs.mongodb.com/manual/reference/method/db.dropDatabase/#db.dropDatabase) | MongoDB 3.6で変更 |
| [enableSharding](https://docs.mongodb.com/manual/reference/command/enableSharding/#dbcmd.enableSharding) | [sh.enableSharding()](https://docs.mongodb.com/manual/reference/method/sh.enableSharding/#sh.enableSharding) | |
| [movePrimary](https://docs.mongodb.com/manual/reference/command/movePrimary/#dbcmd.movePrimary) | | |
| [renameCollection](https://docs.mongodb.com/manual/reference/command/renameCollection/#dbcmd.renameCollection) | [db.collection.renameCollection()](https://docs.mongodb.com/manual/reference/method/db.collection.renameCollection/#db.collection.renameCollection) | |
| [shardCollection](https://docs.mongodb.com/manual/reference/command/shardCollection/#dbcmd.shardCollection) | [sh.shardCollection()](https://docs.mongodb.com/manual/reference/method/sh.shardCollection/#sh.shardCollection) | |
| [removeShard](https://docs.mongodb.com/manual/reference/command/removeShard/#dbcmd.removeShard) | | |
| [setFeatureCompatibilityVersion](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersion) | | |


## `4.0` Feature Compatibility

4.0でのいくつかの機能は、単に4.0のバイナリだけでなく、`featureCompatibilityVersion`を`4.0`に設定することが必要です。
以下の機能が該当します。

- [SCRAM-SHA-256](https://docs.mongodb.com/manual/release-notes/4.0/#scram-sha-256)

- [New type conversion operators and enhancements](https://docs.mongodb.com/manual/release-notes/4.0/#agg-type-conversion)

- [Multi-document transactions](https://docs.mongodb.com/manual/release-notes/4.0/#txn)

- [$dateToString option changes](https://docs.mongodb.com/manual/release-notes/4.0/#datetostring)

- [New change stream methods](https://docs.mongodb.com/manual/release-notes/4.0/#change-stream-methods)

## 一般的な変更点

- 地理情報クエリオペレーターの[$near](https://docs.mongodb.com/manual/reference/operator/query/near/#op._S_near)と[$nearSphere](https://docs.mongodb.com/manual/reference/operator/query/nearSphere/#op._S_nearSphere)は、シャード化されたコレクションに対して問合せすることができるようになりました。

- [create](https://docs.mongodb.com/manual/reference/command/create/#dbcmd.create)コマンド(および[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルでの[db.createCollection()](https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection)メソッド)では、`local`データベース以外のデータベース中にコレクションを作成するとき、`autoIndexId`オプションを`false`に設定することはできません。

- [認証](https://docs.mongodb.com/manual/core/authentication/)が有効になっている場合、[listDatabases](https://docs.mongodb.com/manual/reference/command/listDatabases/#dbcmd.listDatabases)コマンドを[listDatabases](https://docs.mongodb.com/manual/reference/privilege-actions/#listDatabases)権限を持っていない状態で実行すると、ユーザーがコマンドを実行していて[find](https://docs.mongodb.com/manual/reference/privilege-actions/#find)権限を持っているすべてのデータベースの一覧を返します。以前のバージョンでは、[listDatabases](https://docs.mongodb.com/manual/reference/privilege-actions/#listDatabases)権限が無い状態でコマンドを実行すると、`Unauthorized`レスポンスが返されていました。

- [taskExecutorPoolSize](https://docs.mongodb.com/manual/reference/parameters/#param.taskExecutorPoolSize)パラメータのデフォルト値が、`0`から`1`に変更されました。Linuxでは、以前の動作に戻すためには、[taskExecutorPoolSize](https://docs.mongodb.com/manual/reference/parameters/#param.taskExecutorPoolSize)を`0`にして、さらに[AsyncRequestsSenderUseBaton](https://docs.mongodb.com/manual/reference/parameters/#param.AsyncRequestsSenderUseBaton)を`false`に設定してください。

- MongoDB 4.0では[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#mongod)と[mongos](https://docs.mongodb.com/manual/reference/program/mongos/#mongos)インスタンスに対して`transportLayer`と`net.transportLayer`を`legacy`にセットする機能は削除されました。`transportLayer`は自動的に`asio`に設定され、変更はできません。

- MongoDB 4.0以降では、[reIndex](https://docs.mongodb.com/manual/reference/command/reIndex/#dbcmd.reIndex)コマンドとそのヘルパーである[db.collection.reIndex()](https://docs.mongodb.com/manual/reference/method/db.collection.reIndex/#db.collection.reIndex)メソッドは[Global exclusive (W) lock](https://docs.mongodb.com/manual/reference/command/serverStatus/#serverstatus.locks)を取得し、処理が完了するまで他のオペレーションをブロックします。

- `year`、`isoYear`、`timezone`以外のフィールドの値が有効な範囲を超えている場合、[$dateFromParts](https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/#exp._S_dateFromParts)は、日付を計算するために、差分を他の部分に繰り上げたり繰り下げたりして反映します。以前のバージョンでは、有効な範囲を超えた値はエラーになっていました。

- 特権操作である[killCursors](https://docs.mongodb.com/manual/reference/privilege-actions/#killCursors)の動作が変更されました。以前のバージョンでは、ユーザーは対象のカーソルのIDを知っていれば、どんなカーソルでもkillすることができました。MongoDB 4.0では、[killCursors](https://docs.mongodb.com/manual/reference/privilege-actions/#killCursors)権限により、現在認証されているユーザーに紐づくあらゆるカーソルをkillする権限が認められます。ユーザーがカーソルをkillする権限を持っていない場合、[killCursors](https://docs.mongodb.com/manual/reference/command/killCursors/#dbcmd.killCursors)はエラーを返します。

- MongoDB 4.0では、特定のコレクションのあらゆるカーソルをkillできる[killAnyCursor](https://docs.mongodb.com/manual/reference/privilege-actions/#killAnyCursor)権限が追加されました。

- MongoDB 4.0以降では、[mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos)は、[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)バイナリのバージョンが[mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos)バイナリのバージョンより大きく、かつ、[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)のfeature compatibility versionが[mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos)のfeature compatibility versionより大きい場合、[mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスに接続しようとするとクラッシュします。

### `cursor.min()`と`cursor.max()`

範囲を指定するために[max()](https://docs.mongodb.com/manual/reference/method/cursor.max/#cursor.max)メソッドと[min()](https://docs.mongodb.com/manual/reference/method/cursor.min/#cursor.min)メソッドを一緒に使っている場合、[max()](https://docs.mongodb.com/manual/reference/method/cursor.max/#cursor.max)で指定される境界は[min()](https://docs.mongodb.com/manual/reference/method/cursor.min/#cursor.min)で指定される境界より大きい必要があります。

以前のバージョンでは、2つの境界は同じでもよかったのですが、ただしインデックスエントリを検索することはなく、常に空の結果セットが返されていました。

## TLS 1.0の無効化

MongoDBのバイナリ([mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod), [mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos), [mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo))で、TLS 1.1以上がサポートされているシステムでは、TLS 1.0のサポートは無効化されました。

TLS 1.0のサポートが必要な場合は、

- [mongod](https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod)インスタンスについては、[net.ssl.disabledProtocols](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.disabledProtocols)に`none`を指定するか、[--sslDisabledProtocols](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-ssldisabledprotocols)に`none`を指定してください。

- [mongos](https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos)インスタンスについては、[net.ssl.disabledProtocols](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.disabledProtocols)に`none`を指定するか、[--sslDisabledProtocols](https://docs.mongodb.com/manual/reference/program/mongos/#cmdoption-mongos-ssldisabledprotocols)に`none`を指定してください。

- [mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルについては、[--sslDisabledProtocols](https://docs.mongodb.com/manual/reference/program/mongo/#cmdoption-mongo-ssldisabledprotocols)に`none`を指定してください。[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルに対する[--sslDisabledProtocols](https://docs.mongodb.com/manual/reference/program/mongo/#cmdoption-mongo-ssldisabledprotocols)オプションは、以下のバージョンで有効です。
  - MongoDB version 4.0+
  - MongoDB version 3.6.5+
  - MongoDB version 3.4.15+

macOSでは、[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルのバージョン3.6.4またはそれ以前を、MongoDB 4.0以上に接続する場合、明示的にTLS 1.0を有効化する必要があります。

## AES-GCM

Windowsにおいて、MongoDB Enterpriseは`AES256-GCM`をサポートしなくなりました。

## `mongo`シェル

### `show collections`

MongoDB 4.0以降の[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルでは、`show collections`は以下のコマンドと同じです。

```javascript
db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true} )
```

- 必要なアクセス権限を持っているユーザーには、`show collections`はそのデータベースの非システムコレクションの一覧を返します。
- 必要なアクセス権限を持っていないユーザーには、`show collections`はそのユーザーが権限を持っているコレクションの一覧のみを返します。

バージョン4.0の[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルが、`authorizedCollections`と`nameOnly`オプションをサポートしていない以前のバージョンのMongoDBに接続されているときは、

- ユーザーはlistCollectionを実行するために必要な権限を持っている必要があります。
- 必要な権限を持っていないユーザーが`show collections`を実行した場合、MongoDBは[connectionStatus](https://docs.mongodb.com/manual/reference/command/connectionStatus/#dbcmd.connectionStatus)により返される[authenticatedUserPrivileges](https://docs.mongodb.com/manual/reference/command/connectionStatus/#connectionStatus.authInfo.authenticatedUserPrivileges)フィールドを使って、おおまかなコレクションの一覧を返します。

### `db.getCollectionNames()`

4.0以降の[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルでは、[db.getCollectionNames()](https://docs.mongodb.com/manual/reference/method/db.getCollectionNames/#db.getCollectionNames)は以下のコマンドと同じです。

```javascript
db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
```

- 必要なアクセス権限(データベースに対して[listCollections](https://docs.mongodb.com/manual/reference/privilege-actions/#listCollections)アクションを認める権限)を持っているユーザーには、データベース中のすべてのコレクションの一覧を返します。
- 必要なアクセス権限を持っていないユーザーには、ユーザーが権限を持っているコレクションの一覧のみを返します。たとえば、データベースの中であるコレクションに対する[find](https://docs.mongodb.com/manual/reference/privilege-actions/#find)権限を持っている場合、そのコレクションのみが返されます。

## バイナリの削除および非推奨化されたフィールド/コマンド

### `mongoperf`

MongoDB 4.0では`mongoperf`バイナリは削除されました。

### `copydb`および`clone`コマンド

MongoDB 4.0では[copydb](https://docs.mongodb.com/manual/reference/command/copydb/#dbcmd.copydb)および[clone](https://docs.mongodb.com/manual/reference/command/clone/#dbcmd.clone)コマンドと、それらの[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルでのヘルパーである[db.copyDatabase()](https://docs.mongodb.com/manual/reference/method/db.copyDatabase/#db.copyDatabase)メソッド、[db.cloneDatabase()](https://docs.mongodb.com/manual/reference/method/db.cloneDatabase/#db.cloneDatabase)メソッドが非推奨となりました。

その代替として、以下の方法が可能です。

- [mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/#bin.mongodump)と[mongorestore](https://docs.mongodb.com/manual/reference/program/mongorestore/#bin.mongorestore)を使うか、ドライバを使ってスクリプトを作成します。

### パラメータ

- 古い`logUserIds`パラメータが削除されました。代わりに[監査機能](https://docs.mongodb.com/manual/core/auditing/)を利用してください。

### `$isolated`オペレータ

MongoDBは`$isolated`オペレータのサポートを削除しました。`$isolated`オペレータを含むpartialインデックスや、`$isolated`オペレータを含むviewが存在する場合は、インデックスやviewの定義の中から当該オペレータを外して、アップグレードの前に再作成してください。

`$isolated`オペレータの変わりに、[トランザクション](https://docs.mongodb.com/manual/core/transactions/)を使用してください。

### `geoNear`コマンド

MongoDB 4.0では、[geoNear](https://docs.mongodb.com/manual/reference/command/geoNear/#dbcmd.geoNear)コマンドは非推奨となりました。代わりに、以下のいずれかのオペレーションを使用してください。

- [$geoNear](https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear) aggregationステージ

- [$near](https://docs.mongodb.com/manual/reference/operator/query/near/#op._S_near) クエリオペレータ

- [$nearSphere](https://docs.mongodb.com/manual/reference/operator/query/nearSphere/#op._S_nearSphere) クエリオペレータ

### `maxScan`オプション

[find](https://docs.mongodb.com/manual/reference/command/find/#dbcmd.find)コマンドの`maxScan`オプション、および、[mongo](https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)シェルのヘルパー[cursor.maxScan()](https://docs.mongodb.com/manual/reference/method/cursor.maxScan/#cursor.maxScan)は非推奨となりました。代わりに、`maxTimeMS`オプション、または、ヘルパーの[cursor.maxTimeMS()](https://docs.mongodb.com/manual/reference/method/cursor.maxTimeMS/#cursor.maxTimeMS)を使用してください。

### 出力フィールドの変更

- [replSetGetStatus](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#dbcmd.replSetGetStatus)から返される以下のフィールドは非推奨となりました。

  - [replSetGetStatus.syncingTo](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.syncingTo)

  - [replSetGetStatus.members[n].syncingTo](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.members[n].syncingTo)

  代わりに、`replSetGetStatus.replSetGetStatus.syncSourceHost`と[replSetGetStatus.members[n].syncSourceHost](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.members[n].syncSourceHost)を使用してください。

- [$currentOp](https://docs.mongodb.com/manual/reference/operator/aggregation/currentOp/#pipe._S_currentOp)aggregationステージ、[currentOp](https://docs.mongodb.com/manual/reference/command/currentOp/#dbcmd.currentOp)コマンド、[db.currentOp()](https://docs.mongodb.com/manual/reference/method/db.currentOp/#db.currentOp)ヘルパーの出力から、`threadId`フィールドが削除されました。

- [serverStatus](https://docs.mongodb.com/manual/reference/command/serverStatus/#dbcmd.serverStatus)コマンドの出力の[asserts.warning](https://docs.mongodb.com/manual/reference/command/serverStatus/#serverstatus.asserts.warning)フィールドは、常に`0`となりました。