Gin使用mongo进行增删改查/聚合/数据转换
生活随笔
收集整理的這篇文章主要介紹了
Gin使用mongo进行增删改查/聚合/数据转换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
包
go.mongodb.org/mongo-driver/mongo查詢
查詢Count
包含了過濾+回調(diào)函數(shù)+執(zhí)行三部分
filter := primitive.M{} filter["monitor_ta"] = body.MonitorType filter["catego"] = body.catego filter["status"] = primitive.M{"$ne": DelStatus, }query := func(collection *mongo.Collection) (interface{}, error) {total, err := collection.CountDocuments(ctx, filter, options.Count())if err != nil {return nil, err}return total, nil } total, err := m.mongoConn.Execute(dimension, query)查詢所有記錄:分頁 轉(zhuǎn)化數(shù)據(jù)格式
filter := primitive.M{} filter["monitor_ta"] = body.MonitorType filter["catego"] = body.catego filter["status"] = primitive.M{"$ne": DelStatus, }query = func(collection *mongo.Collection) (interface{}, error) {opts := options.Find().SetLimit(body.Size).SetSkip((int64(body.Page) - 1) * body.Size)cur, err := collection.Find(ctx, filter, opts)if err != nil {return nil, err}var meta []metadata.Dimensionerr = cur.All(ctx, &meta)if err != nil {return nil, err}return meta, nil } res, err := m.mongoConn.Execute(dimension, query)//轉(zhuǎn)換數(shù)據(jù)樣式 list := make([]metadata.Dimension, 0) reuse, err := json.Marshal(res) if err != nil {return nil, err } err = json.Unmarshal(reuse, &list) if err != nil {return nil, err }type Response struct {Total int64 ???????????????`json:"total"`List ?[]metadata.Dimension `json:"list"` }info := Response{Total: total.(int64), List: list}查詢一條記錄
filter := primitive.M{} filter["monitor_ta"] = body.MonitorType filter["catego"] = body.categoquery := func(collection *mongo.Collection) (interface{}, error) {var meta metadata.Dimensionerr := collection.FindOne(context.TODO(), filter).Decode(&meta)if err != nil {return nil, err}return meta, nil } result, _ := m.mongoConn.Execute(dimension, query)查詢記錄:正則使用模糊查詢
filter := primitive.M{} filter["monitor_ta"] = body.MonitorType filter["catego"] = body.catego filter["status"] = primitive.M{"$ne": DelStatus, }if body.Name != "" {filter["name"] = primitive.M{"$regex": ??body.Name,"$options": "imsx",} }修改:UpdateOne
filter := primitive.M{} filter["monitor_ta"] = body.MonitorTypequery = func(collection *mongo.Collection) (interface{}, error) {opts := options.Update().SetUpsert(false)filter := primitive.D{{"_id", body.Id}}update := primitive.D{{"$set", primitive.D{{"name", body.Name},{"example", body.Example},{"description", body.Description},{"monitor_ta", body.MonitorType},{"catego", body.catego},{"status", normalStatus},{"update_time", time.Now().Unix()},}}}res, err := collection.UpdateOne(context.TODO(), filter, update, opts)if err != nil {return nil, err}return res, nil }if _, err := m.mongoConn.Execute(dimension, query); err != nil {return false, err } else {return true, nil }新建:InsertOne
query = func(collection *mongo.Collection) (interface{}, error) {insert := primitive.D{{"name", body.Name},{"example", body.Example},{"description", body.Description},{"monitor_ta", body.MonitorType},{"catego", body.catego},{"status", normalStatus},{"update_time", time.Now().Unix()},}opts := options.InsertOne()res, err := collection.InsertOne(context.TODO(), insert, opts)if err != nil {return nil, err}return res, nil }if _, err := m.mongoConn.Execute(dimension, query); err != nil {return false, err } else {return true, nil }刪除:軟刪除
query := func(collection *mongo.Collection) (interface{}, error) {filter := primitive.D{{"_id", body.Id}}update := primitive.D{{"$set", primitive.D{{"status", DelStatus}}}}res, err := collection.UpdateOne(context.TODO(), filter, update)if err != nil {return nil, err}return res, nil }if _, err := m.mongoConn.Execute(dimension, query); err != nil {return false, err } else {return true, nil }聚合
Match相當(dāng)于過濾條件where
group里面的id是聚合的字段
Project是要顯示的字段
condition = primitive.M{} condition["status"] = primitive.M{"$ne": DelStatus, } condition["unit"] = primitive.M{"$ne": "", } query = func(collection *mongo.Collection) (interface{}, error) {groupStage := []primitive.D{{{"$match", condition}},{{"$group", primitive.D{{"_id", primitive.D{{"unit", "$unit"},}},{"unit", primitive.D{{"$first", "$unit"}}},}}},{{"$project", primitive.D{{"_id", 0}}}},}opts := options.Aggregate().SetMaxTime(2 * time.Second)cursor, err := collection.Aggregate(ctx, mongo.Pipeline(groupStage), opts)var res []primitive.Merr = cursor.All(ctx, &res)return res, err }data, err = m.mongoConn.Execute(metric, query) res, err = json.Marshal(data) var unit []metadata.Metric err = json.Unmarshal(res, &unit) info["unit"] = unit總結(jié)
以上是生活随笔為你收集整理的Gin使用mongo进行增删改查/聚合/数据转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Prometheus的promql符号表
- 下一篇: Gin实际编写中间件