update Client

master v1.0.1
李光春 2 years ago
parent 446f020eb3
commit c58f5c6afd

@ -8,17 +8,17 @@ import (
"go.mongodb.org/mongo-driver/mongo/options"
)
const Version = "1.0.0"
const Version = "1.0.1"
type app struct {
db *mongo.Client // 驱动
type Client struct {
Db *mongo.Client // 驱动
Dns string // 连接地址
databaseName string // 库名
DatabaseName string // 库名
collectionName string // 表名
}
// NewApp 实例化并链接数据库
func NewApp(dns string) *app {
// NewClient 实例化并链接数据库
func NewClient(dns string, databaseName string) *Client {
// 连接到MongoDB
db, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(dns))
if err != nil {
@ -31,17 +31,23 @@ func NewApp(dns string) *app {
panic(fmt.Sprintf("数据库【mongo】连接服务器失败%v", err))
}
return &app{db: db, Dns: dns}
if databaseName == "" {
return &Client{Db: db, Dns: dns}
}
return &Client{Db: db, Dns: dns, DatabaseName: databaseName}
}
// NewDb 实例化并传入链接
func NewDb(db *mongo.Client) *app {
return &app{db: db}
func NewDb(db *mongo.Client, databaseName string) *Client {
if databaseName == "" {
return &Client{Db: db}
}
return &Client{Db: db, DatabaseName: databaseName}
}
// Close 关闭
func (app *app) Close() {
err := app.db.Disconnect(context.TODO())
func (c *Client) Close() {
err := c.Db.Disconnect(context.TODO())
if err != nil {
panic(errors.New(fmt.Sprintf("数据库【mongo】关闭失败%v", err)))
}

@ -9,59 +9,59 @@ import (
)
// Database 设置库名
func (app *app) Database(database string) *app {
app.databaseName = database
return app
func (c *Client) Database(database string) *Client {
c.DatabaseName = database
return c
}
// Collection 设置表名
func (app *app) Collection(collection string) *app {
app.collectionName = collection
return app
func (c *Client) Collection(collection string) *Client {
c.collectionName = collection
return c
}
// Model 传入模型自动获取库名和表名
func (app *app) Model(value interface{}) *app {
func (c *Client) Model(value interface{}) *Client {
// https://studygolang.com/articles/896
val := reflect.ValueOf(value)
if methodValue := val.MethodByName("Database"); methodValue.IsValid() {
app.databaseName = methodValue.Call(nil)[0].String()
c.DatabaseName = methodValue.Call(nil)[0].String()
}
if methodValue := val.MethodByName("TableName"); methodValue.IsValid() {
app.collectionName = methodValue.Call(nil)[0].String()
c.collectionName = methodValue.Call(nil)[0].String()
}
return app
return c
}
func (app *app) Session() (session mongo.Session, err error) {
session, err = app.db.StartSession()
func (c *Client) Session() (session mongo.Session, err error) {
session, err = c.Db.StartSession()
return
}
// InsertOne 插入单个文档
func (app *app) InsertOne(value interface{}) (result *mongo.InsertOneResult, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) InsertOne(value interface{}) (result *mongo.InsertOneResult, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err = collection.InsertOne(context.TODO(), value)
return result, err
}
// InsertMany 插入多个文档
func (app *app) InsertMany(values []interface{}) (result *mongo.InsertManyResult, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) InsertMany(values []interface{}) (result *mongo.InsertManyResult, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err = collection.InsertMany(context.TODO(), values)
return result, err
}
// Delete 删除文档
func (app *app) Delete(filter interface{}) (int64, error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) Delete(filter interface{}) (int64, error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
count, err := collection.DeleteOne(context.TODO(), filter, nil)
return count.DeletedCount, err
}
// DeleteMany 删除多个文档
func (app *app) DeleteMany(key string, value interface{}) (int64, error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) DeleteMany(key string, value interface{}) (int64, error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
filter := bson.D{{key, value}}
count, err := collection.DeleteMany(context.TODO(), filter)
return count.DeletedCount, err
@ -72,8 +72,8 @@ func (app *app) DeleteMany(key string, value interface{}) (int64, error) {
// 字段增加值 inc($inc)
// 从数组中增加一个元素 push($push)
// 从数组中删除一个元素 pull($pull)
func (app *app) UpdateOne(filter, update interface{}) (int64, error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) UpdateOne(filter, update interface{}) (int64, error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err := collection.UpdateOne(context.TODO(), filter, update)
return result.UpsertedCount, err
}
@ -83,43 +83,43 @@ func (app *app) UpdateOne(filter, update interface{}) (int64, error) {
// 字段增加值 inc($inc)
// 从数组中增加一个元素 push($push)
// 从数组中删除一个元素 pull($pull)
func (app *app) UpdateMany(filter, update interface{}) (int64, error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) UpdateMany(filter, update interface{}) (int64, error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err := collection.UpdateMany(context.TODO(), filter, update)
return result.UpsertedCount, err
}
// Find 查询
func (app *app) Find(filter interface{}, opts ...*options.FindOptions) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) Find(filter interface{}, opts ...*options.FindOptions) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err = collection.Find(context.TODO(), filter, opts...)
return result, err
}
// FindOne 查询单个文档
func (app *app) FindOne(filter interface{}) (result *mongo.SingleResult) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) FindOne(filter interface{}) (result *mongo.SingleResult) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result = collection.FindOne(context.TODO(), filter)
return result
}
// FindMany 查询多个文档
func (app *app) FindMany(filter interface{}) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) FindMany(filter interface{}) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err = collection.Find(context.TODO(), filter)
return result, err
}
// FindManyByFilters 多条件查询
func (app *app) FindManyByFilters(filter interface{}) (result *mongo.Cursor, err error) {
collection, err := app.db.Database(app.databaseName).Collection(app.collectionName).Clone()
func (c *Client) FindManyByFilters(filter interface{}) (result *mongo.Cursor, err error) {
collection, err := c.Db.Database(c.DatabaseName).Collection(c.collectionName).Clone()
result, err = collection.Find(context.TODO(), bson.M{"$and": filter})
return result, err
}
// FindManyByFiltersSort 多条件查询支持排序
func (app *app) FindManyByFiltersSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) {
collection, err := app.db.Database(app.databaseName).Collection(app.collectionName).Clone()
func (c *Client) FindManyByFiltersSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) {
collection, err := c.Db.Database(c.DatabaseName).Collection(c.collectionName).Clone()
findOptions := options.Find()
findOptions.SetSort(Sort)
result, err = collection.Find(context.TODO(), filter, findOptions)
@ -127,8 +127,8 @@ func (app *app) FindManyByFiltersSort(filter interface{}, Sort interface{}) (res
}
// FindCollection 查询集合文档
func (app *app) FindCollection(Limit int64) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) FindCollection(Limit int64) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
findOptions := options.Find()
findOptions.SetLimit(Limit)
result, err = collection.Find(context.TODO(), bson.D{{}}, findOptions)
@ -136,8 +136,8 @@ func (app *app) FindCollection(Limit int64) (result *mongo.Cursor, err error) {
}
// FindCollectionSort 查询集合文档支持排序
func (app *app) FindCollectionSort(Sort interface{}, Limit int64) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) FindCollectionSort(Sort interface{}, Limit int64) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
findOptions := options.Find()
findOptions.SetSort(Sort)
findOptions.SetLimit(Limit)
@ -146,8 +146,8 @@ func (app *app) FindCollectionSort(Sort interface{}, Limit int64) (result *mongo
}
// FindManyCollectionSort 查询集合文档支持排序支持条件
func (app *app) FindManyCollectionSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) FindManyCollectionSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
findOptions := options.Find()
findOptions.SetSort(Sort)
result, err = collection.Find(context.TODO(), filter, findOptions)
@ -155,8 +155,8 @@ func (app *app) FindManyCollectionSort(filter interface{}, Sort interface{}) (re
}
// CollectionCount 查询集合里有多少数据
func (app *app) CollectionCount() (name string, size int64) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) CollectionCount() (name string, size int64) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
name = collection.Name()
size, _ = collection.EstimatedDocumentCount(context.TODO())
return name, size
@ -166,8 +166,8 @@ func (app *app) CollectionCount() (name string, size int64) {
// Skip 跳过
// Limit 读取数量
// sort 1 -1 . 1 为升序 -1 为降序
func (app *app) CollectionDocuments(Skip, Limit int64, sort int, key string, value interface{}) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) CollectionDocuments(Skip, Limit int64, sort int, key string, value interface{}) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
SORT := bson.D{{"_id", sort}}
filter := bson.D{{key, value}}
findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip)
@ -176,15 +176,15 @@ func (app *app) CollectionDocuments(Skip, Limit int64, sort int, key string, val
}
// AggregateByFiltersSort 统计分析
func (app *app) AggregateByFiltersSort(pipeline interface{}, opts ...*options.AggregateOptions) (result *mongo.Cursor, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) AggregateByFiltersSort(pipeline interface{}, opts ...*options.AggregateOptions) (result *mongo.Cursor, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
result, err = collection.Aggregate(context.TODO(), pipeline, opts...)
return result, err
}
// CountDocumentsByFilters 统计数量
func (app *app) CountDocumentsByFilters(filter interface{}) (count int64, err error) {
collection := app.db.Database(app.databaseName).Collection(app.collectionName)
func (c *Client) CountDocumentsByFilters(filter interface{}) (count int64, err error) {
collection := c.Db.Database(c.DatabaseName).Collection(c.collectionName)
count, err = collection.CountDocuments(context.TODO(), filter)
return count, err
}

Loading…
Cancel
Save