createIndexes()(批量创建索引)
最后更新:2026-10-09
createIndexes()(批量创建索引)
createIndexes()一次创建多个索引,例如`db.users.createIndexes([{ key: { age: 1 } }, { key: { email: 1 }, unique: true }])`。与循环调用createIndex()相比,它把索引构建请求合并为一次,部署初始化和迁移时效率更高。每条索引定义包含key(必填)和可选选项。注意:_id索引始终存在且不能删除。
| 分类 | 索引与管理 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.createIndexes([<索引定义>, ...])
⚙️ 参数
| 索引定义数组 | 每个元素含key字段和可选选项,如{key: {age: 1}, unique: true}。 |
|---|
返回值:创建成功后的索引名称列表。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// createIndexes:一次创建年龄索引和邮箱唯一索引
const names = db.users.createIndexes([
{ key: { age: 1 } },
{ key: { email: 1 }, unique: true }
])
names
运行结果:
[ 'age_1', 'email_1' ]
📌 注意事项
- 比逐个createIndex()少多次网络往返
- 同一批中已有同构索引时会跳过并复用
- 建索引期间对大数据集仍有资源开销
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
QcreateIndexes和createIndex哪个好?
A需要一次建多个索引时用createIndexes(),一次请求完成;单个索引用createIndex()更直观。
QcreateIndexes能混合普通和唯一索引吗?
A可以,在各自的key外带选项即可,例如{key: {age: 1}}和{key: {email: 1}, unique: true}。
Q重复创建同名索引会怎样?
A相同定义的索引已存在时会跳过创建,返回现有索引名,不会报错。