setDefaultRWConcern
定義
setDefaultRWConcern
setDefaultRWConcern
管理コマンドは、レプリカセットまたはシャーディングされたクラスターの、グローバルなデフォルトの読み取りまたは書込み保証 (write concern) 構成を構成します。setDefaultRWConcern
はadmin
データベースに対して実行する必要があります。setDefaultRWConcern
レプリカセットの場合は、mongod
プライマリ で コマンドを発行します。シャーディングされたクラスターの場合は、
mongos
でsetDefaultRWConcern
を発行し 。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、 「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.adminCommand( { setDefaultRWConcern : 1, defaultReadConcern: { <read concern> }, defaultWriteConcern: { <write concern> }, writeConcern: { <write concern> }, comment: <any> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
---|---|---|
int |
| |
object | グローバルな読み取り保証 (read concern) の設定を含むドキュメント。有効な読み取り保証オブジェクトを指定します。
現在のグローバル読み取り保証を変更せずに残すには、このドキュメントを省略します。省略した場合、 | |
object | グローバルなデフォルトの書込み保証 (write concern) の構成を含むドキュメント。
このドキュメントを省略すると、現在のグローバル書込み保証は変更されません。省略した場合、 | |
オブジェクト | 任意。 コマンド自体で使用する 省略した場合、 | |
comment | any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 |
setDefaultRWConcern
は、現在構成されているグローバルのデフォルトの読み取りおよび書込み保証を含むオブジェクトを返します。 返されるフィールドの詳細なドキュメントについては、 getDefaultRWConcern
を参照してください。
動作
注意
FeatureCompatibilityVersion 4.4 以上が必要です。
mongod
レプリカセットまたはシャーディングされたクラスター内の各 4.4
setDefaultRWConcern
は、 featureCompatibilityVersion を少なくとも に設定する 必要 があります
MongoDB 5.0以降では、 setDefaultRWConcern
コマンドを使用して CWWC(Cluster Wide Write Concern)を設定すると、書込み保証 (write concern) を設定解除できなくなります。
MongoDB は、読み取りまたは書込み保証が明示的に指定されていない操作にのみ、グローバルなデフォルトの読み取りまたは書込み保証を適用します。
MongoDB でグローバルのデフォルトの読み取りまたは書込み保証が適用されると、その操作は読み取りまたは書込み保証が発行元クライアントによって明示的に指定された場合と同じように動作します。
レプリカセット
setDefaultRWConcern
をレプリカセット プライマリに対して発行します。プライマリから、新しいグローバル デフォルト設定がレプリカセットの残りのノードに複製されます。更新されたグローバルデフォルト設定がまだ複製されていないセカンダリは、引き続きローカルの「古い」デフォルト設定を使用します。
setDefaultRWConcern
の writeConcern を指定して コマンドを発行し、変更がレプリカセット ノードの大部分に伝達された後にのみコマンドが返すようにします。w : "majority"
シャーディングされたクラスター
setDefaultRWConcern
クラスター内の に対してmongos
を発行します。mongos
は更新された設定をコンフィギュレーションサーバー レプリカセット(CSRS)に保存します。 各mongos
は CSRS に対してgetDefaultRWConcern
を定期的に発行して、グローバル設定のローカルコピーを更新します。 mongos
は、更新の間隔中にグローバル デフォルトのローカルの「古い」コピーを使用します。
変更が CSRS ノードの大多数に伝播してからのみコマンドを返すようにするには、 writeConcern を w : "majority"
に設定してsetDefaultRWConcern
コマンドを発行します。
アプリケーションが読み取りまたは書込み保証を明示的に指定せずにmongos
に対して操作を発行すると、 mongos
は対応するグローバル デフォルト設定を適用します。
グローバル デフォルト設定は、個々のシャードに伝播しません。 シャードに対してsetDefaultRWConcern
を実行することはできません。
重要
setDefaultRWConcern
には featureCompatibilityVersion4.4+
が必要です。配置のfeatureCompatibilityVersionを4.4
から4.2
にダウングレードすると、クラスター全体のすべての読み取りおよび書込み保証 (write concern) のデフォルトはなくなりますが、 mongos
インスタンスは最大30秒デフォルトを適用し続ける可能性があります。
シャーディング管理コマンドによる書込み保証設定の上書き
enableSharding
やaddShard
など、コンフィギュレーションサーバー上で書込み操作を実行するシャーディング管理コマンドは、グローバルのデフォルト書込み保証設定に対して独自の動作をします。
これらはコマンドは、設定されたグローバルデフォルト書込み保証と無関係に
"majority"
を使用します。これらのコマンドではwtimeoutの最小値として
60000
を使用します。この値が60000
より大きい場合は、グローバルなデフォルト書込み保証のwtimeout
のみが使用されます。
アクセス制御
自己管理型配置で認証を強制する レプリカセット または シャーディングされたクラスター の場合、 setDefaultRWConcern
には認証されたユーザーがsetDefaultRWConcern
特権アクションを持っている必要があります。
clusterManager
組み込みロール は、 setDefaultRWConcern
を実行するために必要な特権を提供します。
例
グローバルデフォルト書込み保証の設定
以下の操作で、グローバル書込み保証を次のように設定します。
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 } })
この操作は、次のようなドキュメントを返します。
{ "defaultWriteConcern" : { "w" : 2 }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
グローバルのデフォルト読み取り保証を設定
以下の操作で、グローバル読み取り保証を"majority"
に設定します。
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultReadConcern" : { "level" : "majority" } })
この操作は、次のようなドキュメントを返します。
{ "defaultReadConcern" : { "level" : "majority" }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
グローバルのデフォルト読み取り保証および書込み保証の設定
以下の操作で、グローバルのデフォルトの読み取りおよび書込み保証を次のように設定します。
w: 2
書込み保証 (write concern)level: "majority"
読み取り保証 (read concern)。
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" } })
この操作は、次のようなドキュメントを返します。
"defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" }
グローバルのデフォルト読み取り保証および書込み保証の解除
ユーザーは次のアクションを実行できます。
グローバルのデフォルト読み取り保証を解除します。
グローバルのデフォルト書込み保証をまだ設定していない場合にのみ解除できます。
たとえば、グローバルのデフォルト読み取り保証がlevel: "majority"
に設定されているとします。グローバルデフォルト読み取り保証を解除するには、空のドキュメント {}
を使用します。
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultReadConcern" : {} } )
この操作は、操作が成功したことを示す以下のドキュメントを返します。
{ defaultReadConcern: { level: 'local' }, defaultWriteConcern: { w: 2, wtimeout: 0 }, updateOpTime: Timestamp({ t: 1656696934, i: 1 }), updateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), defaultWriteConcernSource: 'global', defaultReadConcernSource: 'implicit', localUpdateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), ok: 1, '$clusterTime': { ... }, operationTime: Timestamp({ t: 1656632593, i: 1 }) }
グローバルのデフォルト書込み保証をまだ設定していない場合にのみ解除できます。
グローバルデフォルト書込み保証の設定を解除するには、空のドキュメント{}
を使用します。
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultWriteConcern" : {} } )
グローバルのデフォルト書込み保証が次の通りである場合、
解除の操作は成功します。
既に設定されている場合、操作は次のエラーを返します。
MongoServerError: The global default write concern cannot be unset once it is set.