mongodb 索引 db.collection.ensureIndex()

<think>好的,用户想了解如何使用MongoDBdb.collection.createIndex方法来创建索引,包括键和选项的示例。我需要根据提供的引用信息和已有的知识来组织回答。 首先,确认db.collection.createIndex的基本语法。语法结构应该是db.collection.createIndex(keys, options)。需要解释keys参数是包含字段和排序方向的文档,比如{ field1: 1, field2: -1 },其中1是升序,-1是降序。 接下来是options参数,常用的选项有unique、name、expireAfterSeconds等。引用中提到的保留字段以"_"或"$"开头,所以在创建索引时需要注意字段名的合法性,不能以这些字符开头。例如,引用[1]提到MongoDB保留这些前缀供内部使用,所以用户应避免使用。 需要提供具体的例子。比如创建单字段索引、复合索引、唯一索引、TTL索引等。例如,创建一个在username字段上的升序索引,并设置唯一约束:db.users.createIndex({username:1}, {unique:true})。 还要注意options参数中的其他选项,比如设置索引名称,或者部分索引的partialFilterExpression。例如,为status字段为"active"的文档创建索引db.products.createIndex({sku:1}, {partialFilterExpression: {status:"active"}})。 此外,引用[2]提到MongoDB使用$操作符,但在创建索引时可能不直接相关,但用户可能需要了解查询时如何使用索引优化。引用[3]和[4]关于删除数据库和使用UserCredentials的内容可能不相关,可以忽略。 需要提醒用户,从MongoDB 3.0开始,ensureIndex方法已被弃用,应使用createIndex。同时,索引命名默认是字段加排序方向的组合,但可以自定义名称。 最后,生成相关问题,比如如何删除索引索引类型、性能影响等,帮助用户进一步学习。</think>### MongoDB createIndex方法详解 #### 一、基本语法 ```javascript db.collection.createIndex(keys, options) ``` - **keys**:指定索引字段及排序方向(1为升序,-1为降序) - **options**:配置索引特性的可选参数(如唯一性约束、TTL等) #### 二、键定义示例 1. **单字段索引** ```javascript db.users.createIndex({username: 1}) // 在username字段创建升序索引 ``` 2. **复合索引** ```javascript db.orders.createIndex({customer_id: 1, order_date: -1}) // 联合索引(客户ID升序+订单日期降序) ``` 3. **多键索引(数组字段)** ```javascript db.products.createIndex({tags: 1}) // 对数组字段tags自动创建多键索引 ``` #### 三、常用选项参数 | 选项 | 说明 | 示例 | |-----------------------|--------------------------------------------------------------------|----------------------------------------| | `unique` | 唯一性约束 | `{unique: true}` | | `name` | 自定义索引名称 | `{name: "my_custom_index"}` | | `expireAfterSeconds` | TTL索引(自动删除过期文档) | `{expireAfterSeconds: 3600}` | | `partialFilterExpression` | 部分索引过滤条件 | `{partialFilterExpression: {status: "active"}}` | | `sparse` | 稀疏索引(仅索引包含字段的文档) | `{sparse: true}` | #### 四、完整示例 1. **唯一索引** ```javascript db.employees.createIndex( {employee_id: 1}, {unique: true, name: "empId_unique_index"} ) ``` 2. **TTL索引(自动清理日志)** ```javascript db.logs.createIndex( {created_at: 1}, {expireAfterSeconds: 604800} // 7天后自动删除 ) ``` 3. **复合索引+部分索引** ```javascript db.inventory.createIndex( {category: 1, price: -1}, { partialFilterExpression: {stock: {$gt: 0}}, name: "available_items_index" } ) ``` #### 五、注意事项 1. 索引命名规范:避免使用$和_开头(MongoDB保留使用)[^1] 2. 索引创建期间会对集合加锁,大型集合建议在低峰期操作 3. 使用`getIndexes()`查看现有索引: ```javascript db.collection.getIndexes() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值