createIndex() (インデックスの作成)
最終更新:2026-10-09
createIndex() (インデックスの作成)
createIndex() はクエリを高速化する単一のインデックスを作成します。例: `db.users.createIndex({ age: 1 }, { unique: true })`。値の 1 は昇順、-1 は降順です。text、hashed、2dsphere のインデックスタイプもサポートされています。ユニークインデックスはフィールドの一意性を強制します。大規模コレクションへのインデックス構築には時間がかかり、書き込みをブロックすることがあるため、本番ではオフピークにスケジュールしてください。
| カテゴリ | インデックスと管理 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.createIndex(<keys>, <options>)
⚙️ パラメータ
| インデックスキー | フィールドと方向のマッピング(例: {age: 1, name: -1})。 |
|---|---|
| オプション | 任意。unique、sparse、name、background などのオプション。 |
戻り値:新しいインデックスの名前(文字列)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// createIndex: age に昇順のユニークインデックスを作成する
const idx = db.users.createIndex({ age: 1 }, { unique: true })
idx
出力:
'age_1'
📌 注意事項
- デフォルトのインデックス名は 'field_direction'。name オプションで上書きできる
- ユニークインデックスは重複を DuplicateKeyError で拒否する
- 複合インデックスのフィールド順は重要。左端のプレフィックスが適用される
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QcreateIndex でユニークインデックスを作るには?
Aオプションに {unique: true} を追加します。例: db.users.createIndex({email: 1}, {unique: true})
QcreateIndex はクエリをブロックしますか?
A古いビルドではバックグラウンドモードでも書き込みに短時間影響がありました。4.2+ のハイブリッドビルドは読み書きへの影響がはるかに少ないですが、大規模コレクションではオフピークを推奨します。
Q複合インデックスを作るには?
A複数のフィールドを渡します。例: db.users.createIndex({age: 1, name: -1})。左端プレフィックスを使うクエリが恩恵を受けます。