Docs Menu

collMod

collMod

collMod により、コレクションにオプションを追加したり、ビュー定義を変更したりできるようになります。

Tip

mongoshでは、このコマンドは 、 hideIndex() 、およびunhideIndex()ヘルパー メソッドを通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

注意

このコマンドによって変更されたビューは、マテリアライズドビューを参照しません。オンデマンドのマテリアライズドビューについて詳しくは、$merge を参照してください。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

このコマンドの構文は、次のとおりです。

注意

MongoDB 4.2 以降

  • collModコマンドのnoPaddingusePowerOf2Sizes MMAPv 1オプションが削除されます。

  • ビュー定義pipelineには$outまたは$mergeステージを含めることはできません。 ビュー定義にネストされたパイプラインが含まれている場合(たとえば、ビュー定義に$lookupまたは$facetステージが含まれている場合)、この制限はネストされたパイプラインにも適用されます。

db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )

<collection or view> には、現在のデータベース内のコレクションまたはビューの名前を指定します。

index

indexオプションは、既存のインデックスの次のプロパティを変更できます。

インデックス プロパティ
説明

expireAfterSeconds

TTL コレクションの有効期限しきい値を決定する秒数。

成功した場合、コマンドは変更されたプロパティの古い値と新しい値の両方を含むドキュメントを返します( expireAfterSeconds_oldexpireAfterSeconds_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_oldhidden_new)を含むドキュメントを返します。

ただし、hidden 値が変更されていない場合(つまり、すでに非表示になっているインデックスを非表示にしたり、すでに非表示になっていないインデックスを表示したりする場合など)は、コマンドは出力から hidden_old フィールドと hidden_new フィールドを省略します。

インデックスを非表示にするには、featureCompatibilityVersion4.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 は対象外です。

注意

  • 検証はアップデートや挿入中に行われます。既存のドキュメントは、変更されるまで検証チェックを受けません。

  • adminlocal、および 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

ビューを定義する集計パイプライン

注意

ビュー定義pipelineには$outまたは$mergeステージを含めることはできません。 ビュー定義にネストされたパイプラインが含まれている場合(たとえば、ビュー定義に$lookupまたは$facetステージが含まれている場合)、この制限はネストされたパイプラインにも適用されます。

アクセス制御を使用して実行されている 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パラメータを削除し、自動削除を無効にします。

以下も参照してください。

comment

任意: このコマンドにコメントを添付できます。コメントは最上位フィールドである必要があり、有効な BSON 型 であれば何でもかまいません。指定したコメントは、このコマンドのレコードの横に次の場所に表示されます。

w

任意: collMod コマンドの書込みの考慮事項を表すドキュメント。

デフォルトの書込み保証を使用する場合は省略します。

配置で認証/承認が強制される場合、 collModコマンドを実行するには次の特権が必要です。

タスク
必要な特権

上限付きコレクションを変更する

collMod データベース内

ビューを変更する

collMod データベース内、および次のいずれか:

  • 変更するビューにfindがないまたは

  • 変更するビューの find と、ソース コレクションまたはビューの find の両方。

組み込みロール 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 }

注意

インデックスを非表示にするには、featureCompatibilityVersion5.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" } )

ただし、 validationActionwarnのみであるため、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" }

詳細については、「スキーマの検証 」を参照してください。