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进行增删改查/聚合/数据转换相关推荐

  1. Java操作Mongodb数据(增删改查聚合查询)

    文章目录 一.Java操作MongoDB 二.使用步骤 1.基础配置 2.实体类 3.MongoDB表数据 3.增删改查聚合查询 总结 一.Java操作MongoDB 上一篇文章介绍了,如何在本地使用 ...

  2. 【敏捷开发】Node.js(nodejs)实现一个接口完成增删改查聚合接口4个功能,最大限度节省接口数量,正所谓“一口多用”(基础版、免登陆、无鉴权)

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...

  3. Go使用mgo增删改查聚合操作

    包 github.com/globalsign/mgo 查询 查询所有 query := func(c *mgo.Collection) (interface{}, error) {q := bson ...

  4. mongo基础---增删改查

    正文 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系数据 ...

  5. PHP:ThinkPHP5数据库操作增删改查-Model类

    1.Model的命名规范 一般model的名字和表名是对应的,例如 表名 pre_user -> 模型名 User.php User 表名 pre_user_info -> 模型名 Use ...

  6. Go使用Gin+mysql实现增删改查

    Go使用Gin+mysql实现增删改查 0.前置知识 Go中的struct. mysql.Gin框架. Web基础. 1.架构 使用mysql作为数据库,Gin作为Web框架. 2.功能模块 1.自定 ...

  7. Go使用Gin+Redis实现增删改查

    Go使用Gin+Redis实现增删改查 0.前置知识 Go中的struct. Redis.Gin框架. Web基础. 1.架构 使用Redis作为数据库,Gin作为Web框架. 2.功能模块 1.自定 ...

  8. day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询

    day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询 昨日内容复习 自定义过滤器.标签.inclusion_tag 1.首先现在应用目录下创建名字为templatet ...

  9. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

最新文章

  1. 架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)
  2. PTA团体程序设计天梯赛-L2-003 月饼
  3. 「图像分割模型」编解码结构SegNet
  4. 很开心收到了Andreas Loew发给我的注册key
  5. 微软2011 Build大会:Windows 8盛大出场(转)
  6. iframe js 加载失败_如何提高Vue项目首页的加载速度
  7. 数据资产纳入国资保值增值考核
  8. 双十一变身大型奥数竞赛现场?数学不好的你请转场
  9. CSS布局说——可能是最全的
  10. Bailian2703 骑车与走路【水题】
  11. linux 查找html文件,linux查找文件内容包含
  12. Linux文件压缩,解压常用命令
  13. 2019最新蚂蚁金服Java 4面真题
  14. java udp发16进制数据_如何通过接口强制发送UDP数据包?
  15. iserdese2接口详解_-02-Xilinx的SerDes接口介绍【Xilinx-LVDS读写功能实现】
  16. 舒尔特方格 (Schulte Grid)
  17. 牛逼,个人开发者可以申请微信支付了!
  18. notepad++安装(kali 64位)
  19. open judge 内排序:Freda的越野跑
  20. C语言家谱管理程序,[C语言]家谱 - 代码贴 - BCCN

热门文章

  1. Arthas 用户文档
  2. SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
  3. Spark查找某个IP的归属地,二分算法,try{}catch{}的使用,将结果存MySQL数据库
  4. C语言进行网站开发之cgi
  5. JQuery闭包,插件的写法
  6. 自定义例外:当没有查询到员工信息时,抛出例外
  7. keras用cpu加速_在训练某些网络时,Keras(Tensorflow后端)在GPU上比在CPU上慢CPU
  8. 回文数python_回文数 python
  9. xilinx SoC学习笔记之PetaLinux
  10. 数据仓库分层ODS DW DM 主题 标签