createIndexes() (複数インデックスの作成)
最終更新:2026-10-09
createIndexes() (複数インデックスの作成)
createIndexes() は1回の呼び出しで複数のインデックスを作成します。例: `db.users.createIndexes([{ key: { age: 1 } }, { key: { email: 1 }, unique: true }])`。createIndex() をループするのに比べ、インデックス構築を単一のリクエストにまとめるため、初期セットアップやマイグレーションでより効率的です。各定義は key が必要で、オプションを持つことができます。_id インデックスは常に存在し、削除できないことに注意してください。
| カテゴリ | インデックスと管理 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.createIndexes([<indexSpecs>, ...])
⚙️ パラメータ
| インデックス定義の配列 | 各要素はキーと任意のフラグを持ちます(例: {key: {age: 1}, unique: true})。 |
|---|
戻り値:作成されたインデックスの名前のリスト。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// createIndexes: age インデックスと email のユニークインデックスを1回で作成する
const names = db.users.createIndexes([
{ key: { age: 1 } },
{ key: { email: 1 }, unique: true }
])
names
出力:
[ 'age_1', 'email_1' ]
📌 注意事項
- createIndex() を繰り返すよりラウンドトリップを削減できる
- すでに存在する同一インデックスはスキップされ再利用される
- 大規模データセットでは構築コストが依然としてかかる
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
QcreateIndexes と createIndex、どちらが良いですか?
A複数のインデックスを1つのリクエストで構築するには createIndexes() を使います。単一なら createIndex() の方が読みやすいです。
QcreateIndexes で通常とユニークのインデックスを混在できますか?
Aできます。各スペックに独自のオプションを付けます。例: {key: {age: 1}} と {key: {email: 1}, unique: true}
Q重複するインデックスを作るとどうなりますか?
A同一のインデックスはスキップされ、既存の名前が返されます。エラーにはなりません。