Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

collMod

項目一覧

  • 定義
  • 互換性
  • 構文
  • オプション
  • インデックス プロパティを変更する
  • ドキュメントを検証する
  • ビューを変更する
  • 時系列コレクションを変更する
  • 上限付きコレクションのサイズを変更する
  • 変更ストリームにおけるドキュメントの変更前と変更後のイメージ
  • コメントを添付する
  • 書込み保証 (write concern)
  • アクセス制御
  • 動作
  • リソースのロック
  • インデックスの有効期限値を変更する
  • クエリ プランナーからインデックスを非表示にする
collMod

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

Tip

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

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

注意

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

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

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

注意

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

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

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

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

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

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

インデックス オプションを変更するには、変更する既存のインデックス オプションのキー パターンまたは名前のいずれかを指定します。

db.runCommand( {
collMod: <collection>,
index: {
keyPattern: <index_spec> | name: <index_name>,
expireAfterSeconds: <number>, // Set the TTL expiration threshold
hidden: <boolean>, // Change index visibility in the query planner
prepareUnique: <boolean>, // Reject new duplicate index entries
unique: <boolean> // Convert an index to a unique index
},
dryRun: <boolean>
} )

インデックスが存在しない場合は、コマンドはエラーになり、"cannot find index <name|keyPattern> for ns <db.collection>" というメッセージが表示されます。

index

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

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

expireAfterSeconds

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

成功した場合、コマンドは次の内容を含むドキュメントを返します。

  • expireAfterSeconds_new: 次に対する新しい値: expireAfterSeconds

  • expireAfterSeconds_old: インデックスに以前にexpireAfterSecondsの値があった場合の expireAfterSecondsの古い値。

インデックス オプション 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 がリセットされます。

prepareUnique

インデックスが新しい重複エントリを受け入れるかどうかを決定するブール値。

prepareUniquetrue の場合、新しい重複エントリは DuplicateKey エラーで失敗します。結果のインデックスはユニークインデックスに変換できます。インデックスを変換するには、unique オプションとともに collMod を使用します。

既存のインデックスがアップデートされて prepareUniquetrue になった場合、そのインデックスには既存の重複するインデックス エントリがチェックされません。

バージョン 6.0 で追加。

unique

インデックスが一意であるかどうかを決定するブール値。

false の値はサポートされていません。

uniquetrue の場合、collModkeyPattern インデックスをスキャンして重複を検索し、重複するインデックス エントリがない場合にはユニークインデックスに変換します。

初期スキャン中に重複が検出された場合、collModCannotConvertIndexToUnique と競合するドキュメントのリストを返します。重複エントリを含むインデックスをユニークインデックスに変換するには、報告された競合を修正し、collMod を再実行します。

変換を終了するには、prepareUniquefalse に設定します。

一意でないインデックスを一意のインデックスに変換する方法の例については、「既存のインデックスを一意のインデックスに変換する 」を参照してください。

バージョン 6.0 で追加。

dryRun

デフォルト値: false

index.uniquetrueの場合にのみ使用されます。

一意でないインデックスを一意のインデックスに変換する前に、 dryRun: trueとともにcollModコマンドを実行できます。 そうすると、MongoDB はコレクション内で重複キーをチェックし、違反を返します。

dryRun: trueを使用して、エラーなくインデックスを一意に変換できることを確認します。

validator

validator により、ユーザーはコレクションに対して検証ルールまたは式を指定できるようになります。

validator オプションは、検証ルールまたは式を指定するドキュメントを受け取ります。クエリ演算子と同じ演算子を使用して式を指定できます。ただし、$near$nearSphere$text$where は対象外です。

注意

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

  • adminlocal、および config データベース内のコレクションに対してバリデーターを指定することはできません。

  • system.* コレクションにバリデーターを指定することはできません。

validationLevel

validationLevel は、アップデート中に MongoDB が既存のドキュメントに検証ルールをどの程度厳密に適用するかを決定します。

"off"
挿入またはアップデートの検証は行われません。
"strict"
デフォルト すべての挿入とすべてのアップデートに検証ルールを適用します。
"moderate"
既存の有効なドキュメントの挿入とアップデートに検証ルールを適用します。既存の無効なドキュメントのアップデートにはルールは適用しません。

validationLevel を使用する例については、「既存のドキュメントの検証レベルを指定する」を参照してください。

validationAction

validationAction オプションは、無効なドキュメントに対して error を実行するか、違反については warn のみを実行して無効なドキュメントを許可するかを決定します。

重要

ドキュメントの検証は、validationLevel によって決定されたドキュメントにのみ適用されます。

validationAction の使用例については、「無効なドキュメントの処理方法を選択する」を参照してください。

注意

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

注意

これは、TTL コレクションの有効期限を変更するために expireAfterSeconds プロパティで index オプションを使用することとは異なります。

自動ドキュメント削除を有効にするか、時系列コレクションの現在の有効期限間隔を変更するには、expireAfterSeconds 値を変更します。

db.runCommand( {
collMod: <collection>,
expireAfterSeconds: <number> | "off"
} )

自動削除を無効にするには、expireAfterSeconds"off" に設定します。または、ドキュメントの有効期限が切れるまでの秒数を指定するには、負ではない 10 進数(>=0)を設定します。

Tip

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

granularity

時系列コレクションの粒度を変更するには、timeseries.granularity を短い時間単位から長い時間単位に増やします。

db.runCommand( {
collMod: "weather24h",
timeseries: { granularity: "seconds" | "minutes" | "hours" }
} )

granularityではなく、カスタム バケット フィールドbucketRoundingSecondsbucketMaxSpanSecondsをアップデートするには、両方のカスタム フィールドをcollModコマンドに含めて、同じ値に設定します。

db.runCommand( {
collMod: "weather24h",
timeseries: {
bucketRoundingSeconds: 86400,
bucketMaxSpanSeconds: 86400
}
} )

粒度間隔またはカスタム バケット値を減らすことはできません。

重要

いずれかの時系列コレクションでカスタム バケット フィールドbucketMaxSpanSecondsbucketRoundingSecondsが明示的に指定されている場合は、MongoDB 6.3 より下にダウングレードすることはできません。 可能であれば、対応するgranularityに変換します。 可能でない場合は、ダウングレードする前にコレクションを削除する必要があります。

コレクションをカスタム バケットから granularity 値に変換するには、bucketMaxSpanSecondsbucketRoundingSeconds の両方が granularity と同等かそれ以下である必要があります。

granularity
bucketRoundingSeconds 制限(この値を含む)
bucketMaxSpanSeconds 制限(この値を含む)

seconds

60

3600

minutes

3600

86400

hours

86400

2592000

Tip

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

バージョン 6.0 で追加。

MongoDB 6.0 以降では、上限付きコレクションのサイズを変更できるようになりました。上限付きコレクションの最大サイズ(バイト単位)を変更するには、cappedSize オプションを使用します。既存の上限付きコレクション内のドキュメントの最大数を変更するには、cappedMax オプションを使用します。

注意

これらのコマンドを使用して oplog のサイズを変更することはできません。代わりに replSetResizeOplog を使用してください。

cappedSize

上限コレクションの新しい最大サイズ(単位: バイト)を指定します。cappedSize0 より大きく、1e+15(1 PB)より小さくなければなりません。

cappedMax

上限付きコレクション内のドキュメントの新しい最大数を指定します。cappedMax0 以下に設定すると、制限がなくなります。

たとえば、次のコマンドは、上限付きコレクションの最大サイズを 100000 バイトに設定し、コレクション内のドキュメントの最大数を 500 に設定します。

db.runCommand( {
collMod: <collection>,
cappedSize: 100000,
cappedMax: 500
} )

バージョン 6.0 で追加。

changeStreamPreAndPostImages

MongoDB 6.0 以降では、変更ストリーム イベントを使用して、変更前と変更後のドキュメントのバージョン(変更前とイメージと変更後のイメージ)を出力できます。

  • 変更前のイメージとは、置換、更新、または削除される前のドキュメントです。挿入されたドキュメントには、変更前のイメージはありません。

  • 変更後のイメージとは、挿入、置換、または更新された後のドキュメントです。削除されたドキュメントには、変更後のイメージはありません。

  • db.createCollection()create 、またはcollModを使用し、コレクションに対してchangeStreamPreAndPostImagesを有効にします。

collMod を使用してコレクションの変更ストリームの事前イメージと事後イメージを有効にするには、changeStreamPreAndPostImages フィールドを使用します。

db.runCommand( {
collMod: <collection>,
changeStreamPreAndPostImages: { enabled: <boolean> }
} )

コレクションの変更ストリームの事前イメージと事後イメージを有効にするには、changeStreamPreAndPostImagestrue に設定します。例:

db.runCommand( {
collMod: "orders",
changeStreamPreAndPostImages: { enabled: true }
} )

コレクションの変更ストリームの事前イメージと事後イメージを無効にするには、changeStreamPreAndPostImagesfalse に設定します。例:

db.runCommand( {
collMod: "orders",
changeStreamPreAndPostImages: { enabled: false }
} )

変更ストリーム イベントにおいて、次の条件に当てはまる場合、変更前と変更後のイメージは使用できません。

  • ドキュメントの更新または削除操作時に、コレクションにおいて有効になっていない場合。

  • expireAfterSeconds で設定した、変更前と変更後のイメージ保持時間が経過した後に削除された場合。

    • 次の例では、クラスター全体でexpireAfterSeconds100秒に設定します。

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )
    • 次の例では、expireAfterSeconds を含む現在の changeStreamOptions 設定を返します。

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • expireAfterSecondsoff に設定すると、デフォルトの保持ポリシーが適用されます。対応する変更ストリーム イベントがoplog から削除されるまで、変更前と変更後のイメージは保持されます。

    • 変更ストリーム イベントが oplog から削除されると、 expireAfterSeconds の変更前と変更後のイメージの保持時間にかかわらず、対応する変更前と変更後のイメージも削除されます。

その他の考慮事項

  • 変更前と変更後のイメージを有効にすると、ストレージ容量が消費され、処理時間が増えます。変更前と変更後のイメージは、必要な場合のみ有効にしてください。

  • 変更ストリーム イベントのサイズを 16 メガバイト未満に制限します。イベントのサイズを制限するには、次の方法があります。

    • ドキュメントのサイズを 8 MB に制限します。updateDescription のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、変更ストリーム出力で変更前と変更後のイメージを同時にリクエストできます。

    • updateDescription のような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更後のイメージのみをリクエストしてください。

    • 次の場合、ドキュメントの変更ストリーム出力では最大 16 MB の変更前のイメージのみをリクエストしてください。

      • ドキュメントのアップデートがドキュメントの構造または内容のごく一部にしか影響しない場合、そして

      • replace 変更イベントが発生しない場合。replace イベントには、常に変更後のイメージが含まれます。

  • 変更前イメージをリクエストするには、db.collection.watch() で、fullDocumentBeforeChangerequired または whenAvailable に設定します。変更後イメージをリクエストするには、同じ方法で fullDocument を設定します。

  • 変更前のイメージは config.system.preimages コレクションに書き込まれます。

    • config.system.preimages コレクションが大きくなる場合があります。コレクションのサイズを制限するには、前述のとおり、変更前のイメージに expireAfterSeconds 時間を設定します。

    • 変更前のイメージはバックグラウンド プロセスによって非同期で削除されます。

重要

下位互換性のない機能

MongoDB 6.0 以降、変更ストリームにドキュメントの事前イメージと事後イメージを使用している場合は、以前の MongoDB バージョンにダウングレードする前に、collMod コマンドを使用して、各コレクションの changeStreamPreAndPostImages を無効にする必要があります。

Tip

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

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 でインデックスを指定する必要があります。

戻る

cloneCollectionAsCapped