Skip to content

索引

MODM 通过字段的 Uniques()Indexes()IndexModels() 创建索引,需要调用 EnsureIndexes()EnsureIndexesByModel()

参考代码

go
type User struct {
	modm.DefaultField `bson:",inline"`
	Name              string `bson:"name,omitempty" json:"name"`
	Age               uint   `bson:"age,omitempty" json:"age"`
	PhoneNumber       string `bson:"phone_number,omitempty" json:"phone_number"`
}

// 唯一索引
func (u *User) Uniques() []string {
	return []string{"name"}
}

// 普通索引,`-`表示降序
func (u *User) Indexes() []string {
	return []string{"name,-age", "-name", "age,-name"}
}

// 使用官方 mongo.IndexModel 支持更多索引类型
func (u *User) IndexModels() []mongo.IndexModel {
	return []mongo.IndexModel{
		{
			Keys: bson.D{
				{Key: "phone_number", Value: int32(1)},
			},
			Options: options.Index().SetUnique(true).SetPartialFilterExpression(bson.D{
				{Key: "phone_number", Value: bson.D{{Key: "$exists", Value: true}}},
			}),
		},
	}
}

func main(){
    ...
    err := db.Users.EnsureIndexesByModel(ctx, &User{})
	if err != nil {
		fmt.Println(err)
	}
}

WARNING

目前仅支持创建索引,不支持自动删除索引

Released under the MIT License.