Mongo采用的是BSON索引,允许对文档中任一字段创建索引

 

Mongo索引的基本命令

创建索引 createIndex({字段1:字段排序方式,...,字段n:字段排序方式});  //字段排序方式分为1和-1,1代表升序,-1代表降序

删除索引 dropIndex({字段1:字段排序方式,...,字段n:字段排序方式})

查询索引 getIndexes()

 

Mongo索引包含以下几种

1. 单键索引

createIndex(字段,字段排序方式),只能用于一个属性上

2 复合索引

createIndex(字段1:字段排序方式,字段2:字段排序方式2)

 注意,查询时要按照复合索引创建顺序来查询,如上,以下几种方式是没法走索引的:

     createIndex(字段2:字段排序方式,字段1:字段排序方式1)  
     db.table.find(字段2:字段排序方式)

 

3 全文搜索索引/文本搜索索引

即针对Mongo文本字段上创建索引。比如有一个名为Test的collection,collection中有一个为description的字段。则可在description上创建全文搜索索引 db.Test.createIndex({description:"text"}),全文搜索引擎创建完成后,可以基于$text和$search进行全文搜索引擎进行查询,比如要查询description中包含enhance字段的内容,其查询语法为:db.Test.find({$text:{$search:"enhance"}});

假设Test中有如下内容

{ "_id": 1, "description": "Learn MongoDB enhance" }
{ "_id": 2, "description": "Advanced MongoDB queries" }
{ "_id": 3, "description": "Mongo enhance" }

那么db.Test.find({$text:{$search:"enhance"}})查询结果为

{ "_id": 3, "description": "Mongo enhance" }
{ "_id": 1, "description": "Learn MongoDB enhance" }

 

4 TTL索引

并非所有数据都需要持久化,过了一段时间后数据被自动硬删除,TTL对此场景进行支持,其格式为:db.collectionName.createIndex({ 'createDate': 1}, { expireAfterSeconds: 3600 }); expireAfterSeconds=3600表示数据将在createdDate之后3600秒(1小时)后过期被自动删除

 

  • 字段类型:用于TTL的字段通常是日期类型(如Date),也可以是数字类型的时间戳(如NumberLong),但最好是使用Date类型,因为MongoDB可以更准确地处理日期
  • TTL不能用于复合索引
  • 索引方向:TTL索引只能升序排序(即{ field: 1 }),因为MongoDB需要能够找到最早应该被删除的文档

 

 

  • 性能:虽然TTL索引可以提高数据的清理效率,但过多的使用或不当的使用(如频繁更新过期时间)可能会影响数据库性能。确保合理设计数据模型和索引策略。

 

 

  • 后台任务:MongoDB有一个后台任务定期检查并删除过期的文档。这个任务的频率和性能可以根据系统的负载自动调整。

 

5 唯一索引

unique=true选项可将索引定义为唯一性索引:db.user.ensureIndex({ name: 1 }, { unique: true });  //name字段不允许出现重复值

也可用于复合索引:db.book.ensureIndex({ type: 1, title: 1}, { unique: true }); // type+tile在表中不能出现重复

也可用于嵌套文档::db.user.ensureIndex({ 'health.height': 1}, { unique: true });

 

posted on 2025-06-26 09:28  colorfulworld  阅读(18)  评论(0)    收藏  举报