You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
61 lines
1.9 KiB
2 years ago
|
package dorm
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"go.mongodb.org/mongo-driver/bson"
|
||
|
"go.mongodb.org/mongo-driver/mongo"
|
||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||
|
)
|
||
|
|
||
|
type MongoCollectionOptions struct {
|
||
|
db *mongo.Client // 驱动
|
||
|
configDatabaseName string // 库名
|
||
|
dbCollection *mongo.Collection // 集合
|
||
|
}
|
||
|
|
||
|
// Collection 选择集合
|
||
|
func (cd *MongoDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoCollectionOptions {
|
||
|
return &MongoCollectionOptions{
|
||
|
db: cd.db, // 驱动
|
||
|
configDatabaseName: cd.configDatabaseName, // 库名
|
||
|
dbCollection: cd.dbDatabase.Collection(name, opts...), // 集合
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// CreateOneIndexes 创建一个索引
|
||
|
func (cc *MongoCollectionOptions) CreateOneIndexes(ctx context.Context, key string, value string) (string, error) {
|
||
|
return cc.dbCollection.Indexes().CreateOne(ctx, mongo.IndexModel{
|
||
|
Keys: bson.D{{
|
||
|
Key: key,
|
||
|
Value: value,
|
||
|
}},
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// CreateOneUniqueIndexes 创建一个唯一索引
|
||
|
func (cc *MongoCollectionOptions) CreateOneUniqueIndexes(ctx context.Context, key string, value string) (string, error) {
|
||
|
return cc.dbCollection.Indexes().CreateOne(ctx, mongo.IndexModel{
|
||
|
Keys: bson.D{{
|
||
|
Key: key,
|
||
|
Value: value,
|
||
|
}},
|
||
|
Options: options.Index().SetUnique(true),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// CreateOneUniqueIndexesOpts 创建一个索引
|
||
|
func (cc *MongoCollectionOptions) CreateOneUniqueIndexesOpts(ctx context.Context, key string, value string, opts *options.IndexOptions) (string, error) {
|
||
|
return cc.dbCollection.Indexes().CreateOne(ctx, mongo.IndexModel{
|
||
|
Keys: bson.D{{
|
||
|
Key: key,
|
||
|
Value: value,
|
||
|
}},
|
||
|
Options: opts,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// CreateManyIndexes 创建多个索引
|
||
|
func (cc *MongoCollectionOptions) CreateManyIndexes(ctx context.Context, models []mongo.IndexModel) ([]string, error) {
|
||
|
return cc.dbCollection.Indexes().CreateMany(ctx, models)
|
||
|
}
|