MongoDB 4.0 Release Notes 翻訳

#Release Notes for MongoDB 4.0
[Release Notes for MongoDB 4.0](https://docs.mongodb.com/manual/release-notes/4.0/)の翻訳です。
[Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported](https://creativecommons.org/licenses/by-nc-sa/3.0/)ライセンスにて配布されています。
自分用のメモを整形しただけなので、誤訳表記ゆれリンク間違いなどいっぱいあると思います。
コメントを頂ければありがたいです。

## まとめを一言で
複数ドキュメントでのACIDトランザクションがサポートされた。
ただしレプリカセットまで。
シャード内でのトランザクションサポートは、次期4.2でサポート予定。
[https://docs.mongodb.com/manual/release-notes/4.0](https://docs.mongodb.com/manual/release-notes/4.0)

## Multi-Document Transactions
MongoDBはバージョン4.0から、レプリカセットに対して、
[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)を実行する機能を提供します。
マルチドキュメントトランザクションでは、トランザクションがコミットされるまで、
トランザクション内の書込み操作はトランザクション外からは見えません。
つまり、マルチドキュメントトランザクションはアトミックです。

**重要：**
多くの場合、マルチドキュメントトランザクションは
シングルドキュメントの書き込みよりもパフォーマンスコストが大きくなります。
そしてマルチドキュメントトランザクションの可用性を、効果的なスキーマ設計の代替にするべきではありません。
多くのシナリオでは、[非正規化データモデル(埋め込みドキュメントとアレイ)](https://docs.mongodb.com/manual/core/data-model-design/#data-modeling-embedding)は、引き続きデータおよびユース・ケースに最適です。
つまり、多くのシナリオでは、データを適切にモデリングすることで、マルチドキュメントトランザクションの必要性を最小限に抑えることができます。

### Feature Compatibility
レプリカセットのすべてのメンバの*featureCompatibilityVersion*は、4.0以上である必要があります。
メンバーの*featureCompatibilityVersion*をチェックするには、メンバーに接続し、次のコマンドを実行します：

```
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
```

*featureCompatibilityVersion*フラグの詳細については、[*set FeatureCompatibilityVersion*](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersion)を参照してください。

### mongo Shell Methods
| Method | Description |
|:-----------|:------------|
| [Session.startTransaction()](https://docs.mongodb.com/manual/reference/method/Session.startTransaction/#Session.startTransaction) | マルチステートメントトランザクションをはじめる |
| [Session.commitTransaction()](https://docs.mongodb.com/manual/reference/method/Session.commitTransaction/#Session.commitTransaction) | トランザクションをコミットする |
| [Session.abortTransaction()](https://docs.mongodb.com/manual/reference/method/Session.abortTransaction/#Session.abortTransaction) | トランザクションを中止する |

### MongoDB Drivers
クライアントは、トランザクションを使用するために、[MongoDB4.0用のドライバ](https://docs.mongodb.com/manual/release-notes/4.0/#drivers)へ更新する必要があります。

### Read Concern snapshot
MongoDB 4.0は、[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)のために新しいread concernレベル
["snapshot"](https://docs.mongodb.com/manual/reference/read-concern-snapshot/#readconcern.%22snapshot%22)を導入しています。
MongoDBは[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)のために、
より強い["local"](https://docs.mongodb.com/manual/reference/read-concern-local/#readconcern.%22local%22) 及び ["majority"](https://docs.mongodb.com/manual/reference/read-concern-majority/#readconcern.%22majority%22)のread concernに置き換える場合があります。

read concernを受け入れるすべての操作のリストについては、[readConcernのサポート](https://docs.mongodb.com/manual/reference/read-concern/#read-concern-operations)を参照してください。

### Read Preference
読み取り操作を含む[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)では、read preferenceに[primary](https://docs.mongodb.com/manual/reference/read-preference/#primary)を使用する必要があります。

特定のトランザクションでのすべての操作は、同じメンバーにルーティングする必要があります。

### Commands
* [abortTransaction](https://docs.mongodb.com/manual/reference/command/abortTransaction/#dbcmd.abortTransaction)
	* 対応するドライバメソッドまたはmongoシェルヘルパー[Session.abortTransaction()](https://docs.mongodb.com/manual/reference/method/Session.abortTransaction/#Session.abortTransaction)を使用してください。
* [commitTransaction](https://docs.mongodb.com/manual/reference/command/commitTransaction/#dbcmd.commitTransaction)
	* 対応するドライバメソッドまたはmongoシェルヘルパー[Session.commitTransaction()](https://docs.mongodb.com/manual/reference/method/Session.commitTransaction/#Session.commitTransaction)を使用してください。

### Locks
デフォルトでは、[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)は、トランザクションの操作に必要なロックを取得するために5ミリ秒待ちます。
トランザクションが5ミリ秒で必要なロックを取得できない場合、トランザクションは中断されます。

[maxTransactionLockRequestTimeoutMillis](https://docs.mongodb.com/manual/reference/parameters/#param.maxTransactionLockRequestTimeoutMillis)パラメータを使用して、トランザクションがロックを取得するまでのwait時間を調整できます。

トランザクションは、中断またはコミット時にすべてのロックを解放します。

### $currentOp
aggregationパイプラインステージである[$currentOp](https://docs.mongodb.com/manual/reference/operator/aggregation/currentOp/#pipe._S_currentOp)(および[currentOp](https://docs.mongodb.com/manual/reference/command/currentOp/#dbcmd.currentOp)コマンドとmongoシェルヘルパーでの[db.currentOp()](https://docs.mongodb.com/manual/reference/method/db.currentOp/#db.currentOp)メソッド)は、トランザクションの一部としてロックを保持するアクティブではないセッションに関する情報を返します。

### Parameters
* [transactionLifetimeLimitSeconds](https://docs.mongodb.com/manual/reference/parameters/#param.transactionLifetimeLimitSeconds)：トランザクションが期限切れとみなされ、次回のクリーンアップ処理が実行されたときに中断される、[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)の存続期間を指定します。
* [maxTransactionLockRequestTimeoutMillis](https://docs.mongodb.com/manual/reference/parameters/#param.maxTransactionLockRequestTimeoutMillis)：[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)がトランザクション操作で必要とされるロックを取得するまでのwait時間を指定します。

## Aggregation
### New Type Conversion Operators
MongoDB 4.0では、型変換に以下の新しいaggregation operatorが追加されています。

| Operator | Description |
|:----------- |:------------ |
| [$convert](https://docs.mongodb.com/manual/reference/operator/aggregation/convert/#exp._S_convert) | 値を指定された型に変換します。|
| [$toBool](https://docs.mongodb.com/manual/reference/operator/aggregation/toBool/#exp._S_toBool) | 値をbooleanに変換します。|
| [$toDate](https://docs.mongodb.com/manual/reference/operator/aggregation/toDate/#exp._S_toDate) | 値を日付に変換します。|
| [$toDecimal](https://docs.mongodb.com/manual/reference/operator/aggregation/toDecimal/#exp._S_toDecimal) | 値をDecimal128に変換します。|
| [$toDouble](https://docs.mongodb.com/manual/reference/operator/aggregation/toDouble/#exp._S_toDouble) | 値をDoubleに変換します。|
| [$toInt](https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/#exp._S_toInt) | 値をintegerに変換します。|
| [$toLong](https://docs.mongodb.com/manual/reference/operator/aggregation/toLong/#exp._S_toLong) | 値をlongに変換します。|
| [$toObjectId](https://docs.mongodb.com/manual/reference/operator/aggregation/toObjectId/#exp._S_toObjectId) | 値をObjectIdに変換します。|
| [$toString](https://docs.mongodb.com/manual/reference/operator/aggregation/toString/#exp._S_toString) | 値を文字列に変換します。|

### New String Operators
MongoDB 4.0では、次の新しいaggregation文字列演算子が追加されています。

| Operator | Description |
|:----------- |:------------ |
|[$ltrim](https://docs.mongodb.com/manual/reference/operator/aggregation/ltrim/#exp._S_ltrim)|空白または指定された文字を、文字列の先頭から削除します。|
|[$rtrim](https://docs.mongodb.com/manual/reference/operator/aggregation/rtrim/#exp._S_rtrim)|空白または指定された文字を、文字列の末尾から削除します。|
|[$trim](https://docs.mongodb.com/manual/reference/operator/aggregation/trim/#exp._S_trim)|空白または指定された文字を、文字列の先頭と末尾から削除します。|

#### Additional Improvements
##### $bucket
[$bucket](https://docs.mongodb.com/manual/reference/operator/aggregation/bucket/#pipe._S_bucket)ステージでは、$literalでラップされたboundaries document argumentsが不要になりました。

##### $dateToString
[$dateToString](https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/#exp._S_dateToString) aggregation operatorには、次のオプションの変更があります。

**ノート**

```
featureCompatibilityVersion(fCV)が "4.0"以上に設定されている必要があります。

* 新しいオプションonNullは、日付がnullまたは欠落している場合に返す値を指定します。
* オプションformatが、オプションになりました。
```

##### $dateFromParts
year、isoYear、およびtimezone以外のフィールドに指定された値が有効な範囲外の場合、
[$dateFromParts](https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/#exp._S_dateFromParts)は日付を計算するために、他の日付パーツとの差から日付を計算します。 詳細については、[Value Range](https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/#datefromparts-values)を参照してください。


##### $dateFromString
[$dateFromString](https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/#exp._S_dateFromString) aggregation operatorは、オプションのformatフィールドを持つようになりました。

##### $currentOp
aggregation pipelineステージ[$currentOp](https://docs.mongodb.com/manual/reference/operator/aggregation/currentOp/#pipe._S_currentOp)は、次の新しいオプションをサポートします。

* idleSessionsオプションは、トランザクションの一部としてロックを保持している、アクティブでないセッションに関する情報を返します。
* localOpsオプションは、シャード上で実行されている操作ではなく、現在のmongosインスタンスでローカルに実行されている操作をレポートできます。


## MongoDB Drivers
以下のドライバが、MongoDB 4.0と機能互換性があります。

* Java 3.8.0
* Python 3.7.0
* C 1.11.0
* C# 2.7
* Node 3.1.0
* Ruby 2.6.0
* Perl 2.0.0
* PHPC 1.5.0
* Scala 2.4.0

## Security
### Add Support for SCRAM-SHA-256
**ノート：**
[SCRAM-SHA-256](https://docs.mongodb.com/manual/core/security-scram/#authentication-scram-sha-256)を使用するには、
*featureCompatibilityVersion*を4.0に設定する必要があります。*featureCompatibilityVersion*の詳細については、[View FeatureCompatibilityVersion](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#view-fcv)と[setFeatureCompatibilityVersion](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersion)を参照してください。

MongoDBはSHA-256のハッシュ関数を使用する[SCRAM](https://docs.mongodb.com/manual/core/security-scram/#authentication-scram)認証メカニズム、[SCRAM-SHA-256](https://docs.mongodb.com/manual/core/security-scram/#scram-mechanisms)のサポートを追加します。
SCRAM-SHA-256の繰り返し回数を変更するために、MongoDBは新しいパラメータ[scramSHA256iterationCount](https://docs.mongodb.com/manual/reference/parameters/#param.scramSHA256IterationCount)を追加します。

### New Option for Create and Update User Operations
SCRAMユーザーを作成または更新する際、特定のSCRAMメカニズムまたはユーザーcredentialsを指定できます。具体的には、MongoDB4.0では、以下のコマンドとmongoシェルヘルパーにオプションを追加しました。

| Command | Method |
|:-----------|:------------|
| [createUser](https://docs.mongodb.com/manual/reference/command/createUser/#dbcmd.createUser)		| [db.createUser()](https://docs.mongodb.com/manual/reference/method/db.createUser/#db.createUser)|
| [updateUser](https://docs.mongodb.com/manual/reference/command/updateUser/#dbcmd.updateUser)		| [db.updateUser()](https://docs.mongodb.com/manual/reference/method/db.updateUser/#db.updateUser)|

SCRAM-SHA-256を使用する場合、MongoDB(サーバ)にはundigestedなパスワードが必要です。MongoDB 4.0から、*[createUser](https://docs.mongodb.com/manual/reference/command/createUser/#dbcmd.createUser)*コマンドのために*digestPassword*のデフォルト値はtrueで、*passwordDigestor*のデフォルト値は"server"です。
以前のMongoDBバージョンでは、digestPasswordはそれぞれfalseとclientでした。

### New Option for isMaster Command
MongoDB 4.0から、[isMaster](https://docs.mongodb.com/manual/reference/command/isMaster/#dbcmd.isMaster)コマンドはオプションのフィールドsaslSupportedMechs: <db.user>を受け入れ、実行結果に追加フィールド[isMaster.saslSupportedMechs](https://docs.mongodb.com/manual/reference/command/isMaster/#isMaster.saslSupportedMechs)を含め返します。

[isMaster.saslSupportedMechs](https://docs.mongodb.com/manual/reference/command/isMaster/#isMaster.saslSupportedMechs)は、指定されたユーザーのcredentialsを作成するために使用される、SASLメカニズムの配列です。

### Remove Support for MONGODB-CR
バージョン4.0から、MongoDBはdeprecatedだったMongoDB Challenge-Response(MONGODB-CR)認証メカニズムのサポートを削除します。

バージョン3.0以降、MongoDBは、すでにMOGODB-CRユーザーが存在しており、認証スキーマをアップグレードしていない2.6以前のデプロイメントからアップグレードされていない限り、MongoDB-CRユーザーの作成をサポートしていません。

デプロイメントにMOGODB-CRスキーマに格納されたユーザーcredentialsがある場合は、
バージョン4.0にアップグレードする前に、[Salted Challenge Response Authentication Mechanism (SCRAM)](https://docs.mongodb.com/manual/core/security-scram/#authentication-scram)にアップグレードする必要があります。SCRAMへのアップグレードについては、[Upgrade to SCRAM](https://docs.mongodb.com/manual/release-notes/3.0-scram/)を参照してください。


### usersInfo Enhancement
[usersInfo](https://docs.mongodb.com/manual/reference/command/usersInfo/#dbcmd.usersInfo)コマンドは、次のように指定して、すべてのデータベースの情報を返すことができます。

```
{ usersInfo: { forAllDBs: true } }
```

[*usersInfo*](https://docs.mongodb.com/manual/reference/command/usersInfo/#dbcmd.usersInfo)およびmongoシェルヘルパー[*db.dbgetUser()*](https://docs.mongodb.com/manual/reference/method/db.getUser/#db.getUser)および[*db.dbgetUsers()*](https://docs.mongodb.com/manual/reference/method/db.getUsers/#db.getUsers)メソッドは、新しいオプションのフィルタドキュメントを受け入れます。フィルタドキュメントは、条件に一致するユーザーのみを返すために、[*$match*](https://docs.mongodb.com/manual/reference/operator/aggregation/match/#pipe._S_match)ステージ条件を指定します。

[*usersInfo*](https://docs.mongodb.com/manual/reference/command/usersInfo/#dbcmd.usersInfo)コマンドとmongoシェルヘルパー[*db.dbgetUser()*](https://docs.mongodb.com/manual/reference/method/db.getUser/#db.getUser)および[*db.dbgetUsers()*](https://docs.mongodb.com/manual/reference/method/db.getUsers/#db.getUsers)メソッドは、ユーザーのメカニズムフィールドを返します。


### TLS 1.2
MongoDB 4.0バイナリfor macOSはTLS 1.2をサポートします。

### Disable TLS 1.0
MongoDBバイナリmongod, mongos,そしてmongoはTLS 1.1+が利用可能なシステムで
TLS 1.0暗号化のサポートを無効化しました。

TLS 1.0をサポートする必要がある場合は:

* mongodインスタンスでは、[*net.ssl.disabledProtocols*](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.disabledProtocols)に*none*を指定するか、引数オプションに[--sslDisabledProtocols none](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-ssldisabledprotocols)を追加
* mongosインスタンスでは、[*net.ssl.disabledProtocols*](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.disabledProtocols)に*none*を指定するか、引数オプションに[--sslDisabledProtocols none](https://docs.mongodb.com/manual/reference/program/mongos/#cmdoption-mongos-ssldisabledprotocols)を追加
* mongoシェルにおいては、引数オプションに[--sslDisabledProtocols none](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において、バージョン3.6.4以前のmongoシェルをMongoDB 4.0移行に接続するには、
TLS 1.0を明示的に有効にする必要があります。

### AES-GCM
MongoDB Enterprise on Windowsでは、AES256-GCMをサポートしなくなりました。

### New Privilege Actions
[free Cloud monitoring](https://docs.mongodb.com/manual/release-notes/4.0/#free-monitoring)をサポートするため、MongoDBはクラスタリソースで利用可能な以下の特権アクションを追加します。

* [checkFreeMonitoringStatus](https://docs.mongodb.com/manual/reference/privilege-actions/#checkFreeMonitoringStatus)
* [setFreeMonitoring](https://docs.mongodb.com/manual/reference/privilege-actions/#setFreeMonitoring)

MongoDBは、[clusterMonitor](https://docs.mongodb.com/manual/reference/built-in-roles/#clusterMonitor)ロールを変更してこれらの権限を含めます。

### x.509 Authentication Certificate Restrictions
MongoDB 4.0以降、*--sslAllowInvalidCertificates*または*ssl.allowInvalidCertificates：true*を指定した場合、x.509認証を使用すると、無効な証明書でTLS / SSL接続を確立するだけで済みますが、認証には不十分です。

無効な証明書を使用してx.509認証を実行する場合は、証明書を有効な証明書に更新します。 たとえば、信頼できるCAで既存の証明書に署名するか、カスタムCAを使用する場合は、[net.ssl.CAFile](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.CAFile)を使用してCAを指定します。

### Enable System Store for SSL on Windows and Mac
[--sslCertificateSelector](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-sslcertificateselector)オプション([certificateSelector](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.certificateSelector) setting) を使用すると、mongod、mongoシェル、およびmongosは、WindowsおよびMac用のシステムSSL証明書ストアを使用できます。

[--sslClusterCertificateSelector](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-sslclustercertificateselector)オプション([clusterCertificateSelector](https://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.clusterCertificateSelector) setting)を使用すると、mongodおよびmongosは、クラスタ内の内部SSL通信用にWindowsおよびMac用のシステムSSL証明書ストアを使用できます。


## Deprecate MMAPv1
バージョン4.0以降、MongoDBは[MMAPv1ストレージエンジン](https://docs.mongodb.com/manual/core/mmapv1/#storage-mmapv1)を廃止し、将来のリリースでMMAPv1を削除します。
MMAPv1ストレージエンジンを[WiredTiger Storage Engine](https://docs.mongodb.com/manual/core/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/)


## Replica Set
### Remove pv0 for Replica Sets
MongoDB 4.0は、非推奨のレプリカセットプロトコルのバージョン0、pv0を削除します。
MongoDB 4.0にアップグレードする前に、[pv1](https://docs.mongodb.com/manual/reference/replica-configuration/#rsconf.protocolVersion)にアップグレードする必要があります。
pv1にアップグレードするためには、mongoシェルをレプリカセットのプライマリに接続し、
次の一連の操作を実行します。

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

[catchUpTimeoutMillis](https://docs.mongodb.com/manual/reference/replica-configuration/#rsconf.settings.catchUpTimeoutMillis)を使用すると、より高速なフェイルオーバー及び[w:1](https://docs.mongodb.com/manual/reference/write-concern/#writeconcern.%3Cnumber%3E)の書き込み設定の保持の間で優先順位を付けることができます。
pv1の詳細については、[Replica Set Protocol Version](https://docs.mongodb.com/manual/reference/replica-set-protocol-versions/)を参照してください。


### Remove Master-Slave Replication
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)を参照してください。

### Journaling and Replica Sets
MongoDB 4.0から、[--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)を、WiredTigerストレージエンジンを使用するレプリカセットメンバーに対して指定することはできません。

### rollbackTimeLimitSecs Parameter Available
MongoDB 4.0では、新しい[rollbackTimeLimitSecs](https://docs.mongodb.com/manual/reference/parameters/#param.rollbackTimeLimitSecs)パラメータを使用することで、ステップダウンされたプライマリの、共通ポイントと最後のoplog書き込みエントリとの間の時間制限を秒単位で設定できます。


### Wait for Background Index Builds
バージョン4.0以降、MongoDBは[ロールバック](https://docs.mongodb.com/manual/core/replica-set-rollbacks/)を開始する前に、進行中の[バックグラウンドインデックス構築](https://docs.mongodb.com/manual/core/index-creation/#index-creation-background)が完了するまで待機します。

### Rollback Files
MongoDBはロールバック中かどうかを判断するための、ロールバック中に影響を受けるドキュメントを含むロールバック・ファイルを作成するかどうかを決めるパラメータ[createRollbackDataFiles](https://docs.mongodb.com/manual/reference/parameters/#param.createRollbackDataFiles)を追加します。

### replSetGetStatus Output Changes
[replSetGetStatus](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#dbcmd.replSetGetStatus)は、次の新しいフィールドを返します。

* [syncSourceHost](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.syncSourceHost)
* [syncSourceId](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.syncSourceId)
* [lastStableCheckpointTimestamp](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.lastStableCheckpointTimestamp)
* [syncSourceHost](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.members[n].syncSourceHost)
* [syncSourceId](https://docs.mongodb.com/manual/reference/command/replSetGetStatus/#replSetGetStatus.members[n].syncSourceId)

[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)



## Change Streams
MongoDBは次の機能を追加しました。

* 1つのデータベース(admin、local、configデータベースを除く)の[change stream cursor](https://docs.mongodb.com/manual/changeStreams/#changestreams)を開いて、システムコレクション以外のすべてのコレクション対する変更を監視します。
* デプロイメントの[change stream cursor](https://docs.mongodb.com/manual/changeStreams/#changestreams)を開いて、admin、local、およびconfigを除くすべてのデータベースのシステムコレクション以外のすべてのコレクションに対する変更を監視します。

**ノート：**
featureCompatibilityVersion(fCV)が "4.0"以上に設定されている必要があります。

MongoDBは、変更ストリームカーソルの開始時刻(startAtOperationTimeオプション)を指定する機能を追加します。

また、[変更イベントドキュメント](https://docs.mongodb.com/manual/reference/change-events/)には次のものがあります。

* イベントのoplogエントリからのタイムスタンプに対応した、clusterTime
* 操作が[マルチドキュメントトランザクション](https://docs.mongodb.com/manual/core/transactions/)の一部である場合のtxnNumberとlsid

### mongo Shell Methods

| Method | Description |
|:----------- |:------------ |
|[db.watch()](https://docs.mongodb.com/manual/reference/method/db.watch/#db.watch)|単一データベース(admin、local、configデータベースを除く)の[変更ストリームカーソル](https://docs.mongodb.com/manual/changeStreams/#changestreams)を開き、すべてのシステムコレクション以外に対する変更を監視します。対応するMongoDBドライバ方法については、ドライバのマニュアルを参照してください。|
|[Mongo.watch()](https://docs.mongodb.com/manual/reference/method/Mongo.watch/#Mongo.watch)|管理、ローカル、および構成以外のすべてのデータベースにわたるすべてのシステムコレクション以外に対する変更を監視するために、デプロイメントの[変更ストリームカーソル](https://docs.mongodb.com/manual/changeStreams/#changestreams)を開きます。対応するMongoDBドライバ方法については、ドライバのマニュアルを参照してください。バージョン4.0の新機能です。|


## Free Monitoring
MongoDB 4.0(コミュニティエディション)は、スタンドアロンまたはレプリカセットの[フリークラウドモニタリング](https://docs.mongodb.com/manual/administration/free-monitoring/)を提供します。

### Enable/Disable
デフォルトでは、実行時に次のメソッド、コマンドを使用してフリーモニタリングを有効/無効にできます。

| mongo Shell Methods	 | Command |
|:----------- |:------------ |
|[db.enableFreeMonitoring()](https://docs.mongodb.com/manual/reference/method/db.enableFreeMonitoring/#db.enableFreeMonitoring)| [setFreeMonitoring](https://docs.mongodb.com/manual/reference/command/setFreeMonitoring/#dbcmd.setFreeMonitoring) |
|[db.disableFreeMonitoring()](https://docs.mongodb.com/manual/reference/method/db.disableFreeMonitoring/#db.disableFreeMonitoring)|

起動時に、次のいずれかを使用して、フリーモニタリングを有効または無効にすることもできます。

* コンフィグファイルによる設定 [cloud.monitoring.free.state](https://docs.mongodb.com/manual/reference/configuration-options/#cloud.monitoring.free.state)
* コマンドラインオプション[--enable FreeMonitoring](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-enablefreemonitoring)

### View Status
フリーモニタリングの状態を見るために、MongoDBは次のコマンドとシェルヘルパーを提供します。

| mongo Shell Methods	 | Command |
|:----------- |:------------ |
|[db.getFreeMonitoringStatus()](https://docs.mongodb.com/manual/reference/method/db.getFreeMonitoringStatus/#db.getFreeMonitoringStatus)	| 	[getFreeMonitoringStatus](https://docs.mongodb.com/manual/reference/command/getFreeMonitoringStatus/#dbcmd.getFreeMonitoringStatus) |

[serverStatus](https://docs.mongodb.com/manual/reference/command/serverStatus/#dbcmd.serverStatus)とdb.getServerStatus()ヘルパーには、[freeMonitoring](https://docs.mongodb.com/manual/reference/command/serverStatus/#serverstatus.freeMonitoring)フィールド内の統計も含まれます。

### Access Control
フリーのクラウドモニタリングをサポートするため、MongoDBはクラスタリソースに利用可能な次の権限アクションを追加します。

* [checkFreeMonitoringStatus](https://docs.mongodb.com/manual/reference/privilege-actions/#checkFreeMonitoringStatus)
* [setFreeMonitoring](https://docs.mongodb.com/manual/reference/privilege-actions/#setFreeMonitoring)

組み込みロールである[clusterMonitor](https://docs.mongodb.com/manual/reference/built-in-roles/#clusterMonitor)には、この新しい権限アクションが含まれています。

## Sharded Clusters
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) | Changed in 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)| | |



## .msi Installer on Windows
MongoDB 4.0以降では、MongoDBをサービスとして設定し起動することがインストール中にできます。


## Platform Support
* MongoDB 4.0(Community＆Enterprise)は以下のサポートを追加しています。
	* [Amazon Linux 2](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/)
	* [Debian 9 “Stretch”](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/)
* MongoDB 4.0(Community)は以下のサポートを追加しています。
	* s390x RHEL 6.x
* MongoDB 4.0はSLES 11をサポートしていません。
	* SLES 11のサポートは、MongoDB 3.2.20+、3.4.15+、および3.6.4+でも削除されています
* MongoDB 4.0はUbuntu 12.04をサポートしていません。
	* Ubuntu 12.04のサポートは、MongoDB 3.2.20+、3.4.15+、および3.6.4+でも削除されています。
* 将来のリリースでは、MongoDBは次のプラットフォームのサポートを終了します。
	* Windows 7/2008R2
	* Windows 8/2012
	* Windows 8.1/2012R2
	* Ubuntu 14.04
	* すべてのプラットフォームのサポートマトリックスについては、[Supported Platforms](https://docs.mongodb.com/manual/administration/production-notes/#prod-notes-supported-platforms)を参照してください。

## General Improvements
### Commands
* コマンド[listCollections](https://docs.mongodb.com/manual/reference/command/listCollections/#dbcmd.listCollections)は、データベース上のIntent Shared lockを取得します。 以前のバージョンでは、コマンドはデータベースに対してShared lockを取得していました。
* コマンド[listCollections](https://docs.mongodb.com/manual/reference/command/listCollections/#dbcmd.listCollections)およびそのmongoシェルヘルパー[db.getCollectionInfos()](https://docs.mongodb.com/manual/reference/method/db.getCollectionInfos/#db.getCollectionInfos)は、次のオプションを受け入れます。
	* nameOnly コレクションの名前と型だけを返します。(コレクションのロックを必要としません)
	* authorizedCollections [listCollections](https://docs.mongodb.com/manual/reference/command/listCollections/#dbcmd.listCollections)を実行するために必要な特権を持たないユーザーが、nameOnly：true、authorizedCollections：trueというコマンドを実行して、ユーザーに特権を持つコレクションを返すことができます。
* [serverStatus](https://docs.mongodb.com/manual/reference/command/serverStatus/#dbcmd.serverStatus)コマンドとそのmongoシェルヘルパー[db.serverStatus()](https://docs.mongodb.com/manual/reference/method/db.serverStatus/#db.serverStatus)の出力には、[shardingStatistics](https://docs.mongodb.com/manual/reference/command/serverStatus/#serverstatus.shardingStatistics)が含まれます。 [shardingStatistics](https://docs.mongodb.com/manual/reference/command/serverStatus/#serverstatus.shardingStatistics)には、シャード化されたクラスタ上のメタデータ更新に関するデータが含まれます。
* mongoシェルヘルパー[db.collection.drop()](https://docs.mongodb.com/manual/reference/method/db.collection.drop/#db.collection.drop)は、write concernオプションを受け入れます。
* セッション内でクリエイトされたカーソルの場合、セッション外で[getMore](https://docs.mongodb.com/manual/reference/command/getMore/#dbcmd.getMore)を呼び出すことはできません。 同様に、セッション外でクリエイトされたカーソルの場合、[getMore](https://docs.mongodb.com/manual/reference/command/getMore/#dbcmd.getMore)をセッション内で呼び出すことはできません。
* コマンド[dbHash](https://docs.mongodb.com/manual/reference/command/dbHash/#dbcmd.dbHash)には、次のフィールドが出力されます。
	* cappedコレクションリスト内の、*capped* フィールド
	* コレクションとそれに対応するUUIDに含まれる *uuids* フィールド
* [killOp](https://docs.mongodb.com/manual/reference/command/killOp/#dbcmd.killOp)コマンドは、mongosで実行されているクエリの終了をサポートするようになりました。 mongosで実行すると、[killOp](https://docs.mongodb.com/manual/reference/command/killOp/#dbcmd.killOp)は複数のシャードで実行されているクエリを強制終了できます。


### Geospatial Query Improvements
* 地理空間クエリ演算子の[$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)は、シャードされたコレクションのクエリをサポートします。
* MongoDB4.0以降、2dインデックスでminDistanceオプションを使用して、[$geoNear](https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear)aggregation演算子と[geoNear](https://docs.mongodb.com/manual/reference/command/geoNear/#dbcmd.geoNear)コマンドをサポートします。同様に、[$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)は、[2d](https://docs.mongodb.com/manual/core/2d/)インデックスのために$minDistanceオプションをサポートしています。以前は、minDistanceと$minDistanceは[2dsphere](https://docs.mongodb.com/manual/core/2dsphere/)インデックスでのみ使用できました。
* MongoDB 4.0では、[$geoNear](https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear)aggregation演算子と[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演算子または[geoNear](https://docs.mongodb.com/manual/reference/command/geoNear/#dbcmd.geoNear)コマンドを使用するために、コレクションには地理空間インデックスを1つしか持てませんでした。


### Network Layer Improvements
* [taskExecutorPoolSize](https://docs.mongodb.com/manual/reference/parameters/#param.taskExecutorPoolSize)パラメーターのデフォルト値を1に変更しました。
* 新しいパラメータ[AsyncRequestsSenderUseBaton](https://docs.mongodb.com/manual/reference/parameters/#param.AsyncRequestsSenderUseBaton)を有効にすると、[single Task Executor connection pool](https://docs.mongodb.com/manual/reference/parameters/#param.taskExecutorPoolSize)使用時に、Linuxにてmongosの分散/収集操作のパフォーマンスを最適化できます。
* コネクションプールを管理するために次のパラメータを追加しました。
	* [connPoolMaxInUseConnsPerHost](https://docs.mongodb.com/manual/reference/parameters/#param.connPoolMaxInUseConnsPerHost)
	* [connPoolMaxShardedInUseConnsPerHost](https://docs.mongodb.com/manual/reference/parameters/#param.connPoolMaxShardedInUseConnsPerHost)
	* [globalConnPoolIdleTimeoutMinutes](https://docs.mongodb.com/manual/reference/parameters/#param.globalConnPoolIdleTimeoutMinutes)
	* [shardedConnPoolIdleTimeoutMinutes](https://docs.mongodb.com/manual/reference/parameters/#param.shardedConnPoolIdleTimeoutMinutes)


### Configuration Options
* mongosは以下をサポートします。
	* コマンドラインオプションの[slowms](https://docs.mongodb.com/manual/reference/program/mongos/#cmdoption-mongos-slowms)及び[--slowOpSampleRate](https://docs.mongodb.com/manual/reference/program/mongos/#cmdoption-mongos-slowopsamplerate)
	* コンフィグファイルオプションの[operationProfiling.slowOpThresholdMs](https://docs.mongodb.com/manual/reference/configuration-options/#operationProfiling.slowOpThresholdMs) 及び[operationProfiling.slowOpSampleRate](https://docs.mongodb.com/manual/reference/configuration-options/#operationProfiling.slowOpSampleRate)

### Miscellaneous
* JavaScriptエンジンのJITコンパイラーがデフォルトで無効になりました。
* MozJSをESR45.9.0にアップグレードしました。
* ログメッセージに[RECOVERY](https://docs.mongodb.com/manual/reference/log-messages/#RECOVERY)コンポーネントを追加しました。
* MongoDB 4.0では、mongoシェルから接続するときに、[appName](https://docs.mongodb.com/manual/reference/connection-string/#urioption.appName)接続文字列オプションを使用してカスタムアプリケーション名を設定するサポートが追加されました。以前は、[appName](https://docs.mongodb.com/manual/reference/connection-string/#urioption.appName)を使用してカスタム値を設定し、mongoシェルがデフォルトのMongoDBシェル値をアプリケーション名として使用しているMongoDBドライバのみをサポートしていました。
* ドキュメントのハッシュ値を返すためのmongoシェルメソッド [convertShardKeyToHashed](https://docs.mongodb.com/manual/reference/method/convertShardKeyToHashed/#convertShardKeyToHashed)を追加しました。


## Changes Affecting Compatibility
一部の変更は互換性に影響し、ユーザアクションが必要になる場合があります。互換性の変更の詳細については、[Compatibility Changes in MongoDB 4.0](https://docs.mongodb.com/manual/release-notes/4.0-compatibility/)を参照してください。


## Upgrade Procedures
### FEATURE COMPATIBILITY VERSION
アップグレードするためには、3.6インスタンスのfeatureCompatibilityVersionを3.6に設定する必要があります。 バージョンを確認するには

```
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
```

featureCompatibilityVersionの検証と設定、およびアップグレードに関するその他の前提条件/考慮事項の詳細については、以下それぞれのアップグレード手順を参照してください。

* [Upgrade a Standalone to 4.0](https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/)
* [Upgrade a Replica Set to 4.0](https://docs.mongodb.com/manual/release-notes/4.0-upgrade-replica-set/)
* [Upgrade a Sharded Cluster to 4.0](https://docs.mongodb.com/manual/release-notes/4.0-upgrade-sharded-cluster/)

MongoDBアプリケーションを中断せずにスムーズに移行するために、[MongoDB offers major version upgrade services](https://www.mongodb.com/products/consulting?jmp=docs&_ga=2.195553580.1866826865.1530666224-1105940760.1514342574)という4.0へのアップグレードに関するガイダンスを提供します。

## Download
MongoDB 4.0をダウンロードするには、[MongoDB Download Center](https://www.mongodb.com/download-center?jmp=docs&_ga=2.263178380.1866826865.1530666224-1105940760.1514342574#production)へ。

こちらも参照して下さい。

* [All Third Party License Notices](https://github.com/mongodb/mongo/blob/v4.0/distsrc/THIRD-PARTY-NOTICES).

## Known Issues in 4.0.0
* [TOOLS-2058:](https://jira.mongodb.org/browse/TOOLS-2058?_ga=2.263178380.1866826865.1530666224-1105940760.1514342574)
	* [mongoreplay](https://docs.mongodb.com/manual/reference/program/mongoreplay/#bin.mongoreplay)はMongoDB4.0にてinsert/findコマンドを表示しません。

* [WT-4018:](https://jira.mongodb.org/browse/WT-4018?_ga=2.263178380.1866826865.1530666224-1105940760.1514342574)
	* MongoDB 4.0は、MacOS 10.13+での不正なシャットダウン中にデータを失う可能性があります。

* [SERVER-35431:](https://jira.mongodb.org/browse/SERVER-35431?_ga=2.2092721.1866826865.1530666224-1105940760.1514342574)
	* ロールバック後、[collats](https://docs.mongodb.com/manual/reference/command/collStats/#dbcmd.collStats)および[dbStats](https://docs.mongodb.com/manual/reference/command/dbStats/#dbcmd.dbStats)出力でレポートされる‘dataSize’フィールドは不正確になります。

* [SERVER-35657:](https://jira.mongodb.org/browse/SERVER-35657?_ga=2.2092721.1866826865.1530666224-1105940760.1514342574)
	* 単一メンバーのレプリカセットを使用してマルチドキュメントトランザクションを使用すると、パフォーマンスに大きな影響を与えることがあります。単一メンバーのレプリカセットは、テスト/開発目的でのみ使用するべきであり、本番使用に推奨されません。

**ノート：**  
単一メンバーのレプリカセット上のマルチドキュメントトランザクションパフォーマンスは、複数のメンバを持つレプリカセットのパフォーマンスを示すものではありません。


* [SERVER-35758:](https://jira.mongodb.org/browse/SERVER-35758?_ga=2.2092721.1866826865.1530666224-1105940760.1514342574)
	* グローバルdbオブジェクトに関連付けられたセッションを使用してトランザクションを実行すると、mongoシェルのシェルプロンプトでエラーが発生します。

## Report an Issue
問題を報告するには、MongoDBサーバーまたは関連プロジェクトのいずれかにJIRAチケットを登録するため[https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports](https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports)を参照してください。