定義
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 | タイプ | 説明 |
|---|---|---|
| string | 作成するコレクションの名前。詳細は、「命名制限」を参照してください。 |
| ドキュメント | 任意。次の要素を作成するための構成オプションです。
|
options ドキュメントには、次のフィールドが含まれています。
フィールド | タイプ | 説明 | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ブール値 | 任意。上限付きコレクションを作成するには、 | |||||||||||||
| string | 必須(時系列コレクションの作成時)。各時系列ドキュメントの日付を含むフィールドの名前です。時系列コレクション内のドキュメントには、 | |||||||||||||
| string | 任意.各時系列ドキュメントのメタデータを含むフィールドの名前。指定されたフィールドのメタデータは、一意の一連のドキュメントにラベルを付けます。メタデータが変更されることはほとんどありません。 指定されたフィールドの名前を | |||||||||||||
| string | 任意。
粒度とバケット間隔の詳細については、「時系列データの粒度の設定」を参照してください。 | |||||||||||||
| integer | 任意。 MongoDB 6.3 以前のバージョンにダウングレードするには、対応する | |||||||||||||
| integer | 任意。 たとえば、両方のパラメーターを | |||||||||||||
| 数値 | 任意。時系列コレクションまたはクラスター化されたコレクションのドキュメントが期限切れになる秒数を指定します。MongoDB は期限切れのドキュメントを自動的に削除します。 クラスター化されたコレクションでは、ドキュメントはクラスター化されたインデックス キー | |||||||||||||
| ドキュメント | MongoDB 5.3 以降、クラスター インデックス 付きのコレクションを作成できます。クラスター インデックスは、コレクション同様、WiredTiger ファイルに保存されます。結果として得られるコレクションは、クラスター化されたコレクションと呼ばれます。
バージョン5.3の新機能。 | |||||||||||||
| ドキュメント | 任意。 MongoDB 6.0 以降では、変更ストリーム イベントを使用して、変更前と変更後のドキュメントのバージョン(変更前とイメージと変更後のイメージ)を出力できます。
To check the current
コレクションの変更ストリームの事前イメージと事後イメージを有効にするには、 変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。 For a バージョン6.0の新機能。 | |||||||||||||
| 数値 | 任意。上限付きコレクションの最大サイズをバイト単位で指定します。MongoDB は、上限付きコレクションが最大サイズに達すると、古いドキュメントを削除して新しいドキュメント用スペースを確保します。 | |||||||||||||
| 数値 | 任意。上限付きコレクションで許可されるドキュメントの最大数。 | |||||||||||||
| ドキュメント | 任意。WiredTiger ストレージエンジンでのみ使用できます。 コレクションごとにストレージエンジンの構成を指定します。 コレクション作成時に指定されたストレージエンジンの設定は、レプリカセット内で異なるストレージエンジンを使用するノードをサポートするために、複製中に oplog に検証され、ログが記録されます。 MongoDB7.2 (および7.0.5 )以降、 でコレクションを作成する場合、 詳細については、「ストレージエンジン オプションの指定」を参照してください。 | |||||||||||||
| ドキュメント | 任意。コレクションの検証ルールまたは式を指定します。
スキーマ検証を使用してコレクションを作成する方法については、「JSON スキーマ検証の指定」を参照してください。 | |||||||||||||
| string | 任意。更新中に MongoDB が既存のドキュメントに検証ルールをどの程度厳密に適用するかを決定します。
| |||||||||||||
| string | 任意。無効なドキュメントで 重要: ドキュメントの検証は、
| |||||||||||||
| ドキュメント | 任意。コレクション内のインデックスのデフォルト構成を指定します。
インデックスの作成時に指定されたストレージエンジン構成は、異なるストレージエンジンを使用するノードのあるレプリカセットをサポートするために、レプリケーション中に検証され、oplog に記録されます。 | |||||||||||||
| string | ビューの作成元となるコレクションまたはビューの名前。詳細については、「 | |||||||||||||
| 配列 | 集計パイプラインステージで構成される配列。 | |||||||||||||
| ドキュメント | コレクションにデフォルトの照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。 照合を指定する場合、 コレクション・レベルで照合を指定すると、次の効果が生じます。
コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 コレクションに照合を指定できるのは、コレクションの作成時のみです。コレクションのデフォルトの照合は、一度設定すると変更できません。 For an example, see Specify Collation. | |||||||||||||
| ドキュメント | 任意。操作の書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。 When issued on a sharded cluster, | |||||||||||||
| ドキュメント | 任意。 作成されるコレクションのQueryable Encryptionを構成するドキュメント。 コレクション内の暗号化されたフィールド を使用するには、新しい構成オプションを指定します。コレクションの作成時にこの構成を設定するには、コレクションを作成および変更する権限が必要です。コレクションを作成 した後、 構成には、フィールドとそれに対応するキー識別子、型、およびサポートされているクエリのリストが含まれます。 暗号化されたコレクションを作成するヘルパーについては、 詳しくは、Queryable Encryptionチュートリアル を参照してください。 |
アクセス制御
If the deployment enforces authentication/authorization, db.createCollection() requires the following privileges:
タスク | 必要な特権 |
|---|---|
上限のないコレクションの作成 | データベース上の
|
上限付きコレクションの作成 |
|
ビューの作成 |
ただし、ユーザーがデータベースに対して |
データベースに対して 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
changeStreamPreAndPostImagesfor a collection usingdb.createCollection(),create, orcollMod. For example, when using thecollModcommand: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で設定した、変更前と変更後のイメージ保持時間が経過した後に削除された場合。次の例では、クラスター全体で
expireAfterSecondsを100秒に設定します。use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) 注意
setClusterParameterコマンドはMongoDB Atlasクラスターではサポートされていません。すべてのコマンドに対する Atlas のサポートの詳細については、「 Atlas でサポートされていないコマンド 」を参照してください。次の例では、
expireAfterSecondsを含む現在のchangeStreamOptions設定を返します。db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) expireAfterSecondsをoffに設定すると、デフォルトの保持ポリシーが適用されます。対応する変更ストリーム イベントがoplog から削除されるまで、変更前と変更後のイメージは保持されます。変更ストリーム イベントが oplog から削除されると、
expireAfterSecondsの変更前と変更後のイメージの保持時間にかかわらず、対応する変更前と変更後のイメージも削除されます。
その他の考慮事項
変更前と変更後のイメージを有効にすると、ストレージ容量が消費され、処理時間が増えます。変更前と変更後のイメージは、必要な場合のみ有効にしてください。
変更ストリーム イベントのサイズを 16 メビバイト未満に制限します。イベントのサイズを制限するには、次の方法があります。
ドキュメントのサイズを 8 MB に制限します。
updateDescriptionのような他の変更ストリーム イベントのフィールドがそれほど大きくない場合、変更ストリーム出力で変更前と変更後のイメージを同時にリクエストできます。updateDescriptionのような他の変更ストリーム イベントのフィールドが大きくない場合、最大 16 メビバイトのドキュメントの変更ストリーム出力では、変更後のイメージのみをリクエストします。次の場合、16 メビバイトまでのドキュメントの変更ストリーム出力で、変更前のイメージのみをリクエストします。
ドキュメントのアップデートがドキュメントの構造または内容のごく一部にしか影響しない場合、そして
replace変更イベントが発生しない場合。replaceイベントには、常に変更後のイメージが含まれます。
変更前イメージをリクエストするには、
db.collection.watch()で、fullDocumentBeforeChangeをrequiredまたは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.collection.watch()を参照してください。変更ストリーム出力の完全な例については、「Change Streams とドキュメントの変更前イメージおよび変更後イメージ」を参照してください。
照合の指定
照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。
照合はコレクション レベルまたはビュー レベルで指定できます。たとえば、次の操作で照合を作成し、コレクションの照合を指定します(照合フィールドの説明については、照合ドキュメントを参照してください)。
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.