collMod
定義
collMod
collMod
により、コレクションにオプションを追加したり、ビュー定義を変更したりできるようになります。Tip
mongosh
では、このコマンドは 、hideIndex()
、およびunhideIndex()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。注意
このコマンドによって変更されたビューは、マテリアライズドビューを参照しません。オンデマンドのマテリアライズドビューについて詳しくは、
$merge
を参照してください。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
注意
MongoDB 4.2 以降
db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )
<collection or view>
には、現在のデータベース内のコレクションまたはビューの名前を指定します。
オプション
インデックス オプション
index
index
オプションは、既存のインデックスの次のプロパティを変更できます。インデックス プロパティ説明expireAfterSeconds
TTL コレクションの有効期限しきい値を決定する秒数。
成功した場合、コマンドは変更されたプロパティの古い値と新しい値の両方を含むドキュメントを返します(
expireAfterSeconds_old
とexpireAfterSeconds_new
。既存の TTL インデックスのみを変更できます。 (既存の
expireAfterSeconds
プロパティを持つインデックス)。 インデックスに既存のexpireAfterSeconds
プロパティがない場合、操作はno expireAfterSeconds field to update
でエラーになります。インデックス オプション
expireAfterSeconds
を変更すると、インデックスの$indexStats
がリセットされます。MongoDB 5.0 より前のバージョンで作成された TTL インデックスを使用する場合、または MongDB 5.0 で作成されたデータを 5.0 より前のインストールと同期する場合は、「NaN を使用して構成されたインデックス」を参照して誤った構成の問題を回避してください。
TTLインデックスの
expireAfterSeconds
値は、0
から2147483647
の範囲内(両端を含む)である必要があります。hidden
インデックスがクエリ プランナーから非表示かどうかを決定するブール値。
hidden
の値が変更された場合、コマンドは変更されたプロパティの古い値と新しい値の両方(hidden_old
とhidden_new
)を含むドキュメントを返します。ただし、
hidden
値が変更されていない場合(つまり、すでに非表示になっているインデックスを非表示にしたり、すでに非表示になっていないインデックスを表示したりする場合など)は、コマンドは出力からhidden_old
フィールドとhidden_new
フィールドを省略します。インデックスを非表示にするには、featureCompatibilityVersion を
4.4
以上に設定する必要があります。インデックス オプション
hidden
を変更すると、値が変更された場合にインデックスの$indexStats
がリセットされます。インデックス オプションを変更するには、既存のインデックスのキー パターンまたは名前と、変更するインデックス オプションまたはオプションのいずれかを指定します。
db.runCommand( { collMod: <collection>, index: { keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <number>, // If changing the TTL expiration threshold hidden: <boolean> // If changing the visibility of the index from the query planner } } )
ドキュメントの検証
validator
バージョン 3.2 で追加。
validator
により、ユーザーはコレクションに対して検証ルールまたは式を指定できます。 詳細については、「スキーマの検証 」を参照してください。validator
オプションは、検証ルールまたは式を指定するドキュメントを受け取ります。クエリ演算子と同じ演算子を使用して式を指定できます。ただし、$near
、$nearSphere
、$text
、$where
は対象外です。注意
検証はアップデートや挿入中に行われます。既存のドキュメントは、変更されるまで検証チェックを受けません。
admin
、local
、およびconfig
データベース内のコレクションに対してバリデーターを指定することはできません。system.*
コレクションにバリデーターを指定することはできません。
validationLevel
バージョン 3.2 で追加。
validationLevel
は、アップデート中に MongoDB が既存のドキュメントに検証ルールをどの程度厳密に適用するかを決定します。"off"
- 挿入またはアップデートの検証は行われません。
"strict"
- デフォルト すべての挿入とすべてのアップデートに検証ルールを適用します。
"moderate"
- 既存の有効なドキュメントの挿入とアップデートに検証ルールを適用します。既存の無効なドキュメントのアップデートにはルールは適用しません。
validationAction
バージョン 3.2 で追加。
validationAction
オプションは、無効なドキュメントに対してerror
を実行するか、違反についてはwarn
のみを実行して無効なドキュメントを許可するかを決定します。重要
ドキュメントの検証は、
validationLevel
によって決定されたドキュメントにのみ適用されます。"error"
- デフォルト ドキュメントは、書込みが行われる前に検証に合格する必要があります。合格していない場合は、書込み操作に失敗します。
"warn"
- ドキュメントは検証に合格する必要はありません。ドキュメントがバリデーションに失敗した場合、書込み操作はバリデーションの失敗をログに記録します。
コレクションの検証仕様を表示するには、 db.getCollectionInfos()
メソッドを使用します。
ビュー
注意
このコマンドによって変更されたビューは、マテリアライズドビューを参照しません。オンデマンドのマテリアライズドビューについて詳しくは、$merge
を参照してください。
viewOn
ビュー の基礎となるソース コレクションまたはビュー。 ビュー定義は、指定された
pipeline
をこのソースに適用することによって決定されます。アクセス制御を使用して実行されている MongoDB 配置のビューを変更する場合に必要です。
pipeline
注意
アクセス制御を使用して実行されている MongoDB 配置のビューを変更する場合に必要です。
ビュー定義はパブリックです。つまり、ビューに対する
db.getCollectionInfos()
およびexplain
操作には、ビューを定義するパイプラインが含まれます。そのため、ビュー定義で機密性の高いフィールドと値を直接参照することは避けてください。
db.runCommand( { collMod: "myView", viewOn: "activities", pipeline: [ { $match: { status: "Q" } }, { $project: { user: 1, date: 1, description: 1} } ] } )
時系列コレクション
ドキュメントの自動削除を有効にするか、既存の時系列コレクションのexpireAfterSeconds
パラメータ値を変更するには、次のcollMod
コマンドを発行します。
db.runCommand({ collMod: <collection>, expireAfterSeconds: <Number> || "off" })
expireAfterSeconds
フィールドは次のいずれかである必要があります。
非負の 10 進数(
>=0
)string
"off"
。
ドキュメントが期限切れになる秒数を数値で指定します。 string "off"
はexpireAfterSeconds
パラメータを削除し、自動削除を無効にします。
以下も参照してください。
コメントを添付する
任意: このコマンドにコメントを添付できます。コメントは最上位フィールドである必要があり、有効な BSON 型 であれば何でもかまいません。指定したコメントは、このコマンドのレコードの横に次の場所に表示されます。
attr.command.cursor.comment
フィールド内のmongod ログ メッセージ。command.comment
フィールドのデータベースプロファイラー出力。command.comment
フィールドのcurrentOp
出力。
書込み保証 (write concern)
任意: collMod
コマンドの書込みの考慮事項を表すドキュメント。
デフォルトの書込み保証を使用する場合は省略します。
アクセス制御
配置で認証/承認が強制される場合、 collMod
コマンドを実行するには次の特権が必要です。
タスク | 必要な特権 |
---|---|
上限付きコレクションを変更する |
|
ビューを変更する |
組み込みロール dbAdmin
は必要な特権を提供します。
動作
リソースのロック
collMod
コマンドは、操作中に指定されたコレクションのコレクション ロックを取得します。
例
インデックスの有効期限値を変更する
次の例では、user_log
という名前のコレクションの既存の TTL インデックス { lastAccess: 1 }
の expireAfterSeconds
プロパティをアップデートします。インデックスの現在の expireAfterSeconds
プロパティは 1800
秒(または 30 分)に設定されており、この例では値を 3600
秒(または 60 分)に変更しています。
db.runCommand({ collMod: "user_log", index: { keyPattern: { lastAccess: 1 }, expireAfterSeconds: 3600 } })
成功した場合、操作は変更されたプロパティの古い値と新しい値の両方を含むドキュメントを返します。
{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }
クエリ プランナーからインデックスを非表示にする
注意
インデックスを非表示にするには、featureCompatibilityVersion を 5.0
以上に設定する必要があります。
次の例では、orders
コレクションの既存のインデックスを非表示にします。具体的には、この操作により、仕様 { shippedDate: 1 }
のインデックスがクエリ プランナーから非表示になります。
db.runCommand({ collMod: "orders", index: { keyPattern: { shippedDate: 1 }, hidden: true } })
成功した場合、操作は変更されたプロパティの古い値と新しい値の両方を含むドキュメントを返します。
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
注意
操作が成功しても、 hidden
値が変更されていない場合(つまり すでに非表示になっているインデックスを非表示にするか、すでに表示されているインデックスを表示する場合)、コマンドは出力からhidden_old
hidden_new
フィールドと フィールドを省略します。
テキスト インデックスを非表示にするには、keyPattern
ではなく name
でインデックスを指定する必要があります。
以下も参照してください。
既存のコレクションへのドキュメント検証の追加
次の例では、 contacts
という名前の既存のコレクションにバリデーターを追加します。
注意
MongoDB3.6では、$jsonSchema
JSON schema検証をサポートするために 演算子が追加されています。
db.runCommand( { collMod: "contacts", validator: { $jsonSchema: { bsonType: "object", required: [ "phone" ], properties: { phone: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType : "string", pattern : "@mongodb\.com$", description: "must be a string and match the regular expression pattern" }, status: { enum: [ "Unknown", "Incomplete" ], description: "can only be one of the enum values" } } } }, validationLevel: "moderate", validationAction: "warn" } )
moderate
validationLevel
を使用すると、MongoDB は挿入操作と更新操作に検証ルールを適用し、すでに検証条件を満たしている既存のドキュメントに 操作を適用します。 検証条件を満たさない既存のドキュメントに対する更新は、有効性についてチェックされません。
warn
validationAction
を使用すると、MongoDB はすべての違反をログに記録しますが、挿入または更新を続行できます。
たとえば、次の挿入操作は検証ルールに違反します。
db.contacts.insertOne( { name: "Amanda", status: "Updated" } )
ただし、 validationAction
はwarn
のみであるため、MongoDB は検証違反メッセージのみをログに記録し、操作を続行できるようにします。
2017-12-01T12:31:23.738-05:00 W STORAGE [conn1] Document would fail validation collection: example.contacts doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }
詳細については、「スキーマの検証 」を参照してください。