createIndex()(创建索引)
最后更新:2026-10-09
createIndex()(创建索引)
createIndex()为集合创建单个索引以加速查询,例如`db.users.createIndex({ age: 1 }, { unique: true })`。值1表示升序、-1表示降序,还支持text、hashed、2dsphere等索引类型。创建唯一索引可以强制字段值唯一。注意:在大集合上建索引会阻塞写入或耗时较长,生产环境建议在低峰期执行。
| 分类 | 索引与管理 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.createIndex(<索引键>, <选项>)
⚙️ 参数
| 索引键 | 字段到排序方向的映射,如{age: 1, name: -1}。 |
|---|---|
| 选项 | 可选。unique、sparse、name、background等选项。 |
返回值:新索引的名称字符串。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// createIndex:为age字段创建升序索引并设为唯一
const idx = db.users.createIndex({ age: 1 }, { unique: true })
idx
运行结果:
'age_1'
📌 注意事项
- 默认索引名为'字段名_方向',可用name选项自定义
- unique索引会拒绝重复值并抛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}),查询时最左前缀字段会被利用。