AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

db.createCollection()(mongoshメソッド)

db.createCollection(name, options)

新しいコレクションを作成します。ビューについては、「db.createView()」を参照してください。

MongoDB は、コマンドでコレクションを初めて参照したときに、そのコレクションが暗黙的に作成されます。db.createCollection() は主に、次のような特定のオプションを使用するコレクションを作成するために使用します。

db.createCollection() はデータベースコマンド create を囲んでいるラッパーです。

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

  • MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです

注意

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

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

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

db.createCollection() メソッドには次のプロトタイプ形式があります。

db.createCollection( <name>,
{
capped: <boolean>,
timeseries: { // Added in MongoDB 5.0
timeField: <string>, // required for time series collections
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3
bucketRoundingSeconds: <number> // Added in MongoDB 6.3
},
expireAfterSeconds: <number>,
clusteredIndex: <document>, // Added in MongoDB 5.3
changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0
size: <number>,
max: <number>,
storageEngine: <document>,
validator: <document>,
validationLevel: <string>,
validationAction: <string>,
indexOptionDefaults: <document>,
viewOn: <string>,
pipeline: <pipeline>,
collation: <document>,
writeConcern: <document>,
encryptedFields: <document>
}
)

db.createCollection() メソッドには次のパラメーターがあります。

Parameter
タイプ
説明

name

string

作成するコレクションの名前。詳細は、「命名制限」を参照してください。

options

ドキュメント

任意。次の要素を作成するための構成オプションです。

  • 上限付きコレクション

  • クラスター化されたコレクション

  • ビュー

options ドキュメントには、次のフィールドが含まれています。

フィールド
タイプ
説明

capped

ブール値

任意。上限付きコレクションを作成するには、true と指定します。true と指定する場合、size フィールドに最大サイズを設定する必要もあります。

timeseries.timeField

string

必須(時系列コレクションの作成時)。各時系列ドキュメントの日付を含むフィールドの名前です。時系列コレクション内のドキュメントには、timeField の値として有効な BSON 日付が必要です。

timeseries.metaField

string

任意.各時系列ドキュメントのメタデータを含むフィールドの名前。指定されたフィールドのメタデータは、一意の一連のドキュメントにラベルを付けます。メタデータが変更されることはほとんどありません。

指定されたフィールドの名前を _id にすることはできません。また、timeseries.timeField と同じにすることもできません。 フィールドは配列以外のすべてのタイプに設定できます。

timeseries.granularity

string

任意。bucketRoundingSecondsbucketMaxSpanSeconds を設定する場合は使用しないでください。指定できる値は、seconds(デフォルト)、minuteshours です。

granularity を、連続する受信タイムスタンプ間の時間に最も近い値に設定します。これにより、MongoDB がコレクションの内部にデータを保存する方法が最適化され、パフォーマンスが向上します。

粒度とバケット間隔の詳細については、「時系列データの粒度の設定」を参照してください。

timeseries.bucketMaxSpanSeconds

integer

任意。granularity の代わりに、bucketRoundingSeconds と併用します。同じバケット内のタイムスタンプ間の最大時間を設定します。1~31536000 の値を設定できます。bucketMaxSpanSeconds を設定する場合は、bucketRoundingSeconds を同じ値に設定する必要があります。

MongoDB 6.3 以前のバージョンにダウングレードするには、対応する granularity 値を使用するようにコレクションを変更するか、コレクションを削除する必要があります。 詳細については、「collMod」を参照してください。

timeseries.bucketRoundingSeconds

integer

任意。granularity の代わりに、bucketMaxSpanSeconds と併用します。MongoDB が新しいバケットの最小タイムスタンプを設定するときに切り捨てる秒数を設定します。bucketMaxSpanSeconds と等しくなければなりません。

たとえば、両方のパラメーターを 1800 に設定すると、新しいバケットは 30 分単位で切り捨てられます。2023-03-27T18:24:35Z という時間が設定されたドキュメントが既存バケットに収まらない場合、MongoDB は最小時間が 2023-03-27T18:00:00Z で、最大時間が 2023-03-27T18:30:00Z の新しいバケットを作成します。

expireAfterSeconds

数値

任意。時系列コレクションまたはクラスター化されたコレクションのドキュメントが期限切れになる秒数を指定します。MongoDB は期限切れのドキュメントを自動的に削除します。

クラスター化されたコレクションでは、ドキュメントはクラスター化されたインデックス キー _id に基づいて自動的に削除されます。また、値は date 型である必要があります。詳細は、「TTL インデックス」を参照してください。

clusteredIndex

ドキュメント

MongoDB 5.3 以降、クラスター インデックス 付きのコレクションを作成できます。クラスター インデックスは、コレクション同様、WiredTiger ファイルに保存されます。結果として得られるコレクションは、クラスター化されたコレクションと呼ばれます。

clusteredIndex フィールドの構文は次のとおりです。

clusteredIndex: {
key: <object>,
unique: <boolean>,
name: <string>
}

key

必須。クラスター化されたインデックス キー フィールド。{ _id: 1 } に設定する必要があります。_id フィールドのデフォルト値は自動生成されるユニークな ObjectId ですが、独自のクラスター化されたインデックス キー値を設定できます。

unique

必須。true に設定する必要があります。ユニークインデックスは、クラスターインデックスキーの値がインデックス内の既存の値と一致する挿入または更新されたドキュメントをコレクションが受け入れないことを示します。

name

任意。クラスター化されたインデックスを一意に識別する名前。

バージョン5.3の新機能。

changeStreamPreAndPostImages

ドキュメント

任意。

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

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

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

  • Enable changeStreamPreAndPostImages for a collection using db.createCollection(), create, or collMod. For example, when using the collMod command:

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

To check the current changeStreamPreAndPostImages setting for a collection, run db.getCollectionInfos():

db.getCollectionInfos( {
name: "<collection>"
} )[0].options.changeStreamPreAndPostImages
{ changeStreamPreAndPostImages: { enabled: true } }

changeStreamPreAndPostImages の構文は次のとおりです。

changeStreamPreAndPostImages: {
enabled: <boolean>
}

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

変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。

For a db.createCollection() example on this page, see Create a Collection with Change Stream Pre- and Post-Images for Documents.

バージョン6.0の新機能。

size

数値

任意。上限付きコレクションの最大サイズをバイト単位で指定します。MongoDB は、上限付きコレクションが最大サイズに達すると、古いドキュメントを削除して新しいドキュメント用スペースを確保します。size フィールドは、上限付きコレクションに必須であり、他のコレクションでは無視されます。

max

数値

任意。上限付きコレクションで許可されるドキュメントの最大数。size の制限がこの制限よりも優先されます。上限付きコレクションがドキュメントの最大数に達する前に size の制限に達した場合、MongoDB は古いドキュメントを削除します。max 制限の使用を優先する場合は、上限付きコレクションに必要な size 制限をドキュメントの最大数を十分に超える値に設定してください。

storageEngine

ドキュメント

任意。WiredTiger ストレージエンジンでのみ使用できます。

コレクションごとにストレージエンジンの構成を指定します。storageEngine オプションの値は、次の形式になります。

{ <storage-engine-name>: <options> }

コレクション作成時に指定されたストレージエンジンの設定は、レプリカセット内で異なるストレージエンジンを使用するノードをサポートするために、複製中に oplog に検証され、ログが記録されます。

MongoDB7.2 (および7.0.5 )以降、 でコレクションを作成する場合、wiredTiger db.createCollection()ストレージエンジン暗号化オプションは指定できません。 WiredTigerストレージエンジンで暗号化を構成するには、「 保管時の暗号化 」を参照してください。

詳細については、「ストレージエンジン オプションの指定」を参照してください。

validator

ドキュメント

任意。コレクションの検証ルールまたは式を指定します。

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

スキーマ検証を使用してコレクションを作成する方法については、「JSON スキーマ検証の指定」を参照してください。

validationLevel

string

任意。更新中に MongoDB が既存のドキュメントに検証ルールをどの程度厳密に適用するかを決定します。

"off"

挿入またはアップデートの検証は行われません。

"strict"

デフォルト すべての挿入とすべてのアップデートに検証ルールを適用します。

"moderate"

既存の有効なドキュメントの挿入とアップデートに検証ルールを適用します。既存の無効なドキュメントのアップデートにはルールは適用しません。

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

validationAction

string

任意。無効なドキュメントで error を発行するか、違反に関する warn のみに留め、無効なドキュメントを挿入できるようにするかを指定します。

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

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

indexOptionDefaults

ドキュメント

任意。コレクション内のインデックスのデフォルト構成を指定します。

indexOptionDefaults オプションは、次の形式をとる storageEngine ドキュメントを受け入れます。

{ <storage-engine-name>: <options> }

インデックスの作成時に指定されたストレージエンジン構成は、異なるストレージエンジンを使用するノードのあるレプリカセットをサポートするために、レプリケーション中に検証され、oplog に記録されます。

viewOn

string

ビューの作成元となるコレクションまたはビューの名前。詳細については、「db.createView()」を参照してください。

pipeline

配列

集計パイプラインステージで構成される配列。db.createView() は、指定された pipelineviewOn コレクションまたはビューに適用してビューを作成します。詳細については、「db.createView()」を参照してください。

collation

ドキュメント

コレクションにデフォルトの照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

コレクション・レベルで照合を指定すると、次の効果が生じます。

  • インデックス作成操作で別の照合順序を明示的に指定しない限り、そのコレクションのインデックスはその照合順序で作成されます。

  • そのコレクションに対する操作では、明示的に別の照合順序を指定しない限り、コレクションのデフォルトの照合順序が使用されます。

    1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

コレクションに照合を指定できるのは、コレクションの作成時のみです。コレクションのデフォルトの照合は、一度設定すると変更できません。

For an example, see Specify Collation.

writeConcern

ドキュメント

任意。操作の書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。

When issued on a sharded cluster, mongos converts the write concern of the create command and its helper db.createCollection() to "majority".

encryptedFields

ドキュメント

任意。 作成されるコレクションのQueryable Encryptionを構成するドキュメント。

コレクション内の暗号化されたフィールド を使用するには、新しい構成オプションを指定します。コレクションの作成時にこの構成を設定するには、コレクションを作成および変更する権限が必要です。コレクションを作成 した後、encryptedFields の値は不変です。

構成には、フィールドとそれに対応するキー識別子、型、およびサポートされているクエリのリストが含まれます。

encryptedFieldsConfig = {
"fields": [
{
"keyId": UUID, // required
"path": String, // path to field, required
"bsonType": "string" | "int" ..., // required
"queries": // optional
[
{ "queryType": "equality" },
]
}
]
}

暗号化されたコレクションを作成するヘルパーについては、db.createEncryptedCollection() を参照してください。

詳しくは、Queryable Encryptionチュートリアル を参照してください。

If the deployment enforces authentication/authorization, db.createCollection() requires the following privileges:

タスク
必要な特権

上限のないコレクションの作成

データベース上の createCollectionまたは

insert 作成するコレクション上に

convertToCapped (コレクション用)

createCollection (データベース上)

ビューの作成

createCollection (データベース上)。

ただし、ユーザーがデータベースに対してcreateCollection権限を持ち、かつ、作成するビューに対してfind権限を持っている場合には、ユーザーには次の追加の権限必要です。

  • find ソース コレクションまたはビュー。

  • pipelineで参照されている他のコレクションまたはビュー(存在する場合)に対するfind

データベースに対して readWrite 組み込みロールを持つユーザーは、リスト内の操作を実行するために必要な権限があります。必要なロールを持つユーザーを作成するか、既存ユーザーにロールを付与してください。

db.createCollection() obtains an exclusive lock on the specified collection or view for the duration of the operation. All subsequent operations on the collection must wait until db.createCollection() releases the lock. db.createCollection() typically holds this lock for a short time.

ビューを作成するには、データベース内の system.views コレクションに対する追加の排他ロックを取得する必要があります。このロックは、コマンドが完了するまでデータベース内のビューの作成または変更をブロックします。

トランザクションがクロスシャード間書き込みトランザクション(write transaction)でない場合に、分散トランザクション内にコレクションとインデックスを作成できます。

トランザクションで db.createCollection() を使用するには、そのトランザクションで読み取り保証(read concern)"local" を使用する必要があります。読み取り保証レベルを "local" 以外に指定すると、トランザクションは失敗します。

既存のコレクションまたはビューと同じ名前とオプションを使用してdb.createCollection()を実行すると、 db.createCollection()は成功を返します。

上限付きコレクションには、最大サイズと、任意で最大ドキュメント数を設定できます。上限付きコレクションが最大サイズに達すると、MongoDB では、新しいドキュメントのための領域を確保するために古いドキュメントを削除します。次の例では、log という名前の上限付きコレクションを作成します。

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

このコマンドは、最大サイズが 5 メガバイトで、最大ドキュメント数が 5000 の「log」という名前のコレクションを作成します。

上限付きコレクションの詳細については、「上限付きコレクション」を参照してください。

過去 24 時間の気象データを取得する時系列コレクションを作成するには、次のコマンドを実行します。

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
granularity: "hours"
},
expireAfterSeconds: 86400
}
)

あるいは、同じコレクションを作成し、各バケットを同じ時間内のタイムスタンプ値に制限するには、次のコマンドを実行します。

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
bucketMaxSpanSeconds: 3600,
bucketRoundingSeconds: 3600
},
expireAfterSeconds: 86400
}
)

The following db.createCollection() example adds a clustered collection named stocks:

db.createCollection(
"stocks",
{ clusteredIndex: { "key": { _id: 1 }, "unique": true, "name": "stocks clustered key" } }
)

この例では、 clusteredIndexは以下を指定しています。

  • "key": { _id: 1 }は、_id フィールドにクラスター化されたインデックス キーを設定します。

  • "unique": trueは、クラスター化されたインデックス キーの値が一意でなければならないことを示しています。

  • "name": "stocks clustered key"は、クラスター化されたインデックス名を設定します。

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

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

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

  • Enable changeStreamPreAndPostImages for a collection using db.createCollection(), create, or collMod. For example, when using the collMod command:

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

To check the current changeStreamPreAndPostImages setting for a collection, run db.getCollectionInfos():

db.getCollectionInfos( {
name: "<collection>"
} )[0].options.changeStreamPreAndPostImages
{ changeStreamPreAndPostImages: { enabled: true } }

次の例では、changeStreamPreAndPostImages が有効になっているコレクションを作成します。

db.createCollection(
"temperatureSensor",
{ changeStreamPreAndPostImages: { enabled: true } }
);

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

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

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

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

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )

      注意

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

    • 次の例では、expireAfterSeconds を含む現在の changeStreamOptions 設定を返します。

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

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

その他の考慮事項

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

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

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

    • updateDescription のような他の変更ストリーム イベントのフィールドが大きくない場合、最大 16 メビバイトのドキュメントの変更ストリーム出力では、変更後のイメージのみをリクエストします。

    • 次の場合、16 メビバイトまでのドキュメントの変更ストリーム出力で、変更前のイメージのみをリクエストします。

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

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

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

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

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

    • config.system.preimages のサイズを監視するには、シャーディングされたクラスターか、レプリカセットの mongod ノードに接続します。次に、以下のコマンドを実行します。

      use config
      db.system.preimages.totalSize()
      db.system.preimages.stats()

      注意

      これらのコマンドを実行するには、config.system.preimages コレクションに対する collStats 権限アクションが必要です。

      MongoDB Atlas 配置でこれらのコマンドを実行するには、atlasAdmin ロールが必要です。

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

重要

下位互換性のない機能

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

Tip

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合はコレクション レベルまたはビュー レベルで指定できます。たとえば、次の操作で照合を作成し、コレクションの照合を指定します(照合フィールドの説明については、照合ドキュメントを参照してください)。

db.createCollection( "myColl", { collation: { locale: "fr" } } );

この照合は、照合をサポートするインデックスと操作で使用されます。ただし、別の照合を明示的に指定する場合は除きます。例えば、次のドキュメントを myColl に挿入します。

{ _id: 1, category: "café" }
{ _id: 2, category: "cafe" }
{ _id: 3, category: "cafE" }

次の操作はコレクションの照合を使用します。

db.myColl.find().sort( { category: 1 } )

この操作を実行すると、次の順序でドキュメントが返されます。

{ "_id" : 2, "category" : "cafe" }
{ "_id" : 3, "category" : "cafE" }
{ "_id" : 1, "category" : "café" }

バイナリ照合(つまり、特定の照合が設定されていない)を使用するコレクションに対して同じ操作を実行すると、次の順序でドキュメントが返されます。

{ "_id" : 3, "category" : "cafE" }
{ "_id" : 2, "category" : "cafe" }
{ "_id" : 1, "category" : "café" }

db.createCollection() を使用してコレクションを作成するときに、コレクション固有のストレージエンジン構成オプションを指定できます。

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } }
)

この操作では、MongoDB が wiredTiger ストレージエンジンに渡す特定の構成 string を使用して、users という名前の新しいコレクションが作成されます。

たとえば、users コレクション内のファイル ブロックに zlib コンプレッサーを指定するには、次のコマンドで block_compressor オプションを設定します。

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "block_compressor=zlib" } } }
)

Starting in MongoDB 7.2 (and 7.0.5), you can't specify wiredTiger storage engine encryption options when you create a collection with db.createCollection(). To configure encryption for the WiredTiger storage engine, see Encryption at Rest.