欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Gin使用mongo进行增删改查/聚合/数据转换

发布时间:2024/9/20 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Gin使用mongo进行增删改查/聚合/数据转换 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

go.mongodb.org/mongo-driver/mongo

查询

查询Count

包含了过滤+回调函数+执行三部分

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)

查询所有记录:分页 转化数据格式

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)//转换数据样式 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相当于过滤条件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

总结

以上是生活随笔为你收集整理的Gin使用mongo进行增删改查/聚合/数据转换的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。