Skip to content
广告❤️成为赞助商

自动创建索引

使用注解的形式,自动创建索引,帮助你省去索引维护的相关操作,可以将主要精力放在查询上

所在数据库和集合名

  • 使用自动创建索引功能的实体类上,需要使用@CollectionName注解标注,不然会扫描不到
  • 此篇文档中的索引注解,均可与@CollectionName注解互动,使用该注解配置的集合名称和数据库属性

配置

  • 使用MongoPlus的自动创建索引功能,只需开启自动创建索引配置即可
yaml
mongo-plus:
    configuration:
        auto-create-index: true #开启自动创建索引功能

注解

@MongoIndex

  • 注解式索引自动创建
  • 通过该注解,可以对MongoDB指定字段创建索引
属性类型必须指定默认值描述
nameString字段名索引名称
uniquebooleanfalse唯一索引
directionIndexDirectionIndexDirection.ASC索引排序方向
sparsebooleanfalse稀疏索引
expireAfterSecondslong-1索引过期时间,以秒为单位
expireAfterString""自定义类型的索引过期时间
partialFilterExpressionString""部分索引,例:{"$gt",5}
backgroundbooleanfalse是否应该在后台创建索引

expireAfter属性,自定义类型的索引过期时间表示:

  • 天:@MongoIndex(expireAfter = "1d")
  • 时:@MongoIndex(expireAfter = "3h")
  • 分:@MongoIndex(expireAfter = "30m")
  • 秒:@MongoIndex(expireAfter = "30s")

示例

java
@CollectionName("user")
public class User{
    //设置为唯一索引
    @MongoIndex(unique=true)
    private String userName;
}

@MongoTextIndex

  • 注解式文本索引自动创建
  • 通过该注解,可以对MongoDB指定字段创建为文本索引
  • 注意文本索引限制
属性类型必须指定默认值描述
fieldsString[]索引字段,传入多个值即为复合文本索引
nameString字段名索引名称
languageTextLanguagesTextLanguages.ENGLISH文本语言,默认英语
textIndexVersionlong-1尽可能始终使用默认索引版本。 仅在出于兼容性原因需要时才覆盖默认版本

示例

java
@CollectionName("user")
public class User {

}

@MongoHashIndex

  • 注解式哈希索引自动创建
  • 通过该注解,可以对MongoDB指定字段创建为哈希索引

示例

java
@CollectionName("user")
public class User {
    @MongoHashIndex
    private String userName;
}

@MongoCompoundIndex

  • 注解式复合索引自动创建
  • 通过该注解,可以对MongoDB指定字段创建复合索引
  • 复合索引注解,应标注在类上,或可以@MongoCompoundIndexes注解的内部属性使用
属性类型必须指定默认值描述
valueString复合索引值,这里需要传入json格式
nameString字段名索引名称
uniquebooleanfalse唯一复合索引
sparsebooleanfalse稀疏复合索引
partialFilterExpressionString""部分索引
backgroundbooleanfalse是否应该在后台创建索引

value属性,需要传入json格式数据:

  • 如:@CompoundIndex("{'field1':1,'field2':-1},-1表示倒序,1表示正序
  • 当然MongoPlus也支持使用$来表示该字段需要引用类中字段的名称(@CollectionFieldz注解可控制),如下:
  • @CompoundIndex("{'$field1':1,'$field2':-1},该操作将会在本类中找到field1字段,然后获取@CollectionField注解,使用注解的value作为key,如果没有注解则会去掉$当做key

partialFilterExpression属性,和@MongoIndexpartialFilterExpression并不同,该属性需手动指定字段

  • 例:{"field1" : {"$gt",5}}
  • 同样,partialFilterExpression属性也可以使用$来表示字段需要引用类中的字段,如:{"$field1" : {"$gt",5}}

示例

java
@CollectionName("user")
@MongoCompoundIndex(
    value = "{'userName':1,'$userAge':-1}"
    unique = true
    partialFilterExpression = "{\"$userAge\":{\"$gt\",5}}"
)
public class User {

    public String userName;

    @CollectionField("user_age")
    private Integer userAge;

}

@MongoCompoundIndexs

  • 多个复合索引
  • 使用该注解,可以将多个复合索引注解整合到一起使用
属性类型必须指定默认值描述
valueMongoCompoundIndex[]多个复合索引

示例

java
@CollectionName("user")
@MongoCompoundIndexes({
        @MongoCompoundIndex(value = "{'$userName':1,'userAge':1}"),
        @MongoCompoundIndex(value = "{'$userStatus':1,'userAddress':1}")
})
public class User {

    public String userName;

    @CollectionField("user_age")
    private Integer userAge;

    private String userAddress;

    private Integer userAge;

    @MongoHashIndex
    private Integer userStatus;

}

@MongoIndexDs

  • 自动创建索引的数据源
  • 用来标识自动创建的索引应该在哪个数据源
  • 默认为配置中的主数据源,非必要无需使用此配置
属性类型必须指定默认值描述
dataSourceString数据源名称