定義
setDefaultRWConcernsetDefaultRWConcern管理コマンドは、レプリカセットまたはシャーディングされたクラスターの、グローバルなデフォルトの読み取りまたは書込み保証 (write concern) 設定を構成します。setDefaultRWConcernはadminデータベースに対して実行する必要があります。setDefaultRWConcernレプリカセットの場合は、mongodプライマリ で コマンドを発行します。シャーディングされたクラスターの場合は、
mongosでsetDefaultRWConcernを発行し 。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.adminCommand( { setDefaultRWConcern : 1, defaultReadConcern: { <read concern> }, defaultWriteConcern: { <write concern> }, writeConcern: { <write concern> }, comment: <any> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
|---|---|---|
|
| |
| グローバルな読み取り保証 (read concern) の設定を含むドキュメント。有効な読み取り保証オブジェクトを指定します。
現在のグローバル読み取り保証 (read concern)を変更せずに残すには、このドキュメントを省略します。 省略した場合、 | |
| グローバルなデフォルトの書込み保証 (write concern) の構成を含むドキュメント。
現在のグローバル書込み保証 (write concern)を変更せずに残すには、このドキュメントを省略します。 省略した場合、 | |
オブジェクト | 任意。 コマンド自体で使用する 省略した場合、 | |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 |
setDefaultRWConcernは、現在構成されているグローバルのデフォルトの読み取りおよび書込み保証を含むオブジェクトを返します。 返されるフィールドの詳細なドキュメントについては、 getDefaultRWConcernを参照してください。
動作
注意
FeatureCompatibilityVersion 4.4 以上が必要です。
mongodレプリカセットまたはシャーディングされたクラスター内の各 4.4setDefaultRWConcernは、 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.