golang mongodb
看代码吧
package main// 链接案例 https://www.mongodb.com/docs/drivers/go/current/fundamentals/connection/#connection-example
// 快速入门 https://www.mongodb.com/docs/drivers/go/current/quick-start/
import ("context""fmt""log""time""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/bson/primitive""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options"
)var client *mongo.Client //实例
var mondb *mongo.Database //数据库,相当于 dbname
var tab11 *mongo.Collection //集合,相当于表
var err errorfunc init() {url := "mongodb://192.168.0.60:27017//"client, err = mongo.Connect(context.TODO(), options.Client().SetConnectTimeout(time.Second*10).ApplyURI(url)) //实例if err != nil {log.Fatal(err)}mondb = client.Database("test11")tab11 = mondb.Collection("tab11")
}// 定义结构体
type student struct {ID primitive.ObjectID `bson:"_id,omitempty"`Name stringAge int
}// 结构体方法,自定义输出
func (s student) String() string {return fmt.Sprintf("%v %v %v", s.ID, s.Name, s.Age)
}// 插入一行
func insertone() {stu1 := student{Name: "Zhangs", Age: 66}result, err := tab11.InsertOne(context.TODO(), stu1)if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("result: %v\n", result.InsertedID)
}// 插入多行
func insertmany() {stu2 := []any{student{Name: "a", Age: 66},student{Name: "bb", Age: 88},}results, err := tab11.InsertMany(context.TODO(), stu2)// results, err := tab11.InsertMany(context.TODO(), []any{student{Name: "a", Age: 22}, student{Name: "aa", Age: 98}})if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("results.InsertedIDs: %v\n", results.InsertedIDs)
}// 查询一行
func findone() {// m1 := map[string]string{"name": "zhanggs", "age": "33"}filter := bson.M{"name": "Zhangs", "age": 66} //name age 小写var s2 studentresult := tab11.FindOne(context.TODO(), filter)if result.Err() != nil {fmt.Printf("result.Err(): %v\n", result.Err())}err := result.Decode(&s2)if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("s2: %v\n", s2)
}// 多条查询 一次性全部装入[]student
func findmany() {var s3 []studentfilter := bson.M{"name": "a", "age": bson.M{"$gt": 1}} //name age 小写// filter := bson.M{} //无条件,全部符合cursor, err := tab11.Find(context.TODO(), filter) //结果集游标 cursor *mongo.Cursorif err != nil {log.Fatal(err)}defer cursor.Close(context.TODO()) //关闭游标err = cursor.All(context.TODO(), &s3) //全部装入 切片类型的指针中 results argument must be a pointer to a sliceif err != nil {log.Fatal("Decode err: ", err)}for _, v := range s3 { //遍历,一行行打印出来fmt.Printf("v: %v\n", v)}}// 多条查询,逐条装入
func findmanyv2() {var s3 student //因为是逐条返回,所以这里不是切片[]filter := bson.M{"name": "zhangs", "age": 33} //name age 小写// filter := bson.M{} //无条件,全部符合cursor, err := tab11.Find(context.TODO(), filter) //结果集游标 cursor *mongo.Cursorif err != nil {log.Fatal(err)}defer cursor.Close(context.TODO()) //关闭游标for cursor.Next(context.TODO()) {err = cursor.Decode(&s3) //逐条输入if err != nil {log.Fatalf("decode log: %v", s3)}fmt.Printf("s3: %v\n", s3)}
}// 删除一行
func deleteone() {filter := bson.M{"name": "zhangs", "age": 33} //name age 小写deleteResult, err := tab11.DeleteOne(context.TODO(), filter)if err != nil {log.Fatalf("deleteone : %v", err)}fmt.Printf("deleteResult.DeletedCount: %v\n", deleteResult.DeletedCount)
}// 删除多行
func deletemany() {a := map[string]any{"name": "a", "age": 66}fiter := bson.M(a)deletemanyresult, err := tab11.DeleteMany(context.TODO(), fiter)if err != nil {log.Fatalf("deletemanyresult : %v", err)}fmt.Printf("deletemanyresult.DeletedCount: %v\n", deletemanyresult.DeletedCount) //返回删除的行数
}// drop集合tab11
func deletecoll() {err = tab11.Drop(context.TODO())if err != nil {log.Fatalf("drop tab11 %v", err)}
}// 查询所有
func findall() {filter := bson.M{}var stu []studentoptions := options.Find().SetLimit(5).SetSort(bson.M{"age": 1})cursor, _ := tab11.Find(context.TODO(), filter, options)err = cursor.All(context.TODO(), &stu)for _, v := range stu {fmt.Printf("v: %v\n", v)}
}// 构造函数-查询
func find(tab *mongo.Collection, filter primitive.M, opts *options.FindOptions) {var stu []studentcursor, err := tab.Find(context.TODO(), filter, opts)if err != nil {log.Fatalf("cursor :%v", err)}err = cursor.All(context.TODO(), &stu)if err != nil {log.Fatalf("cursorAll %v", err)}for _, v := range stu {fmt.Printf("v: %v\n", v)}
}// update 一行
func updateone() {filter := bson.M{"age": 66}updat := bson.M{"$inc": bson.M{"age": +6}} //这里必须使用 更新操作符 $inc $set $inc 把age 的值 + 6// opts := options.Update()Result, err := tab11.UpdateOne(context.TODO(), filter, updat)if err != nil {fmt.Printf("updateone: %v\n", err)}fmt.Printf("Result.ModifiedCount: %v\n", Result.ModifiedCount)
}// 更新多行
func updatemany() {filter := bson.M{"name": "a"}update := bson.M{"$set": bson.M{"age": 100}} //这里必须使用 更新操作符 $inc $set $set 把age 改为100results, err := tab11.UpdateMany(context.TODO(), filter, update)if err != nil {fmt.Printf("updatemany: %v\n", err)}fmt.Printf("results.ModifiedCount: %v\n", results.ModifiedCount)
}func main() {updatemany()// updateone()// find(tab11, bson.M{}, options.Find().SetSort(bson.M{"age": 1}))// findall()// findone()// insertone()// insertmany()// findmany()// findmanyv2()// deleteone()// deletemany()// deletecoll()
}
排序
降序
options.Find().SetLimit(5).SetSort(bson.M{"age": -1})
升序
options.Find().SetLimit(5).SetSort(bson.M{"age": 1})
查询5条
options.Find().SetLimit(5)
分页
*options.FindOptions.SetSkip(1) // offset
*options.FindOptions.SetLimit(1) // limit
条件查询
filter := bson.M{“name”: “a”, “age”: bson.M{“$gt”: 1}} //name = a , age > 1
$lt 小于 bson.M{"age": bson.M{"$lt": 20}}
$gt 大于 bson.M{"age": bson.M{"$gt": 20}}
$lte 小于等于 bson.M{"age": bson.M{"$lte": 20}} bson.D{{"age", bson.D{{"$lte", 20}}}}
$gte 大于等于 bson.M{"age": bson.M{"$gte": 20}}
$ne 不等于 bson.M{"age": bson.M{"$ne": 20}}
$eq 等于,可以不用这个符号 bson.M{"age": bson.M{"$eq": 20}} bson.M{"age": 20}
$in 在范围内 bson.M{"age": bson.M{"$in": []int{16, 33}}}
$nin 不在范围内 bson.M{"age": bson.M{"$nin": []int{16, 33}}}
更新操作符
$inc 对给定字段数字值增减 bson.M{"$inc": bson.M{"age": -5}}
$set 设置字段值,如果字段不存在则创建
如
bson.M{"$set": bson.M{"age": 100}}
$unset 移除字段 {'$unset':{'Name':""}}
-------------end
相关文章:
golang mongodb
看代码吧 package main// 链接案例 https://www.mongodb.com/docs/drivers/go/current/fundamentals/connection/#connection-example // 快速入门 https://www.mongodb.com/docs/drivers/go/current/quick-start/ import ("context""fmt""log"…...

docker中的jenkins去配置sonarQube
docker中的jenkins去配置sonarQube 1、拉取sonarQube macdeMacBook-Pro:~ mac$ docker pull sonarqube:8.9.6-community 8.9.6-community: Pulling from library/sonarqube 8572bc8fb8a3: Pull complete 702f1610d53e: Pull complete 8c951e69c28d: Pull complete f95e4f8…...

企业如何实现自己的AI垂直大模型
文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者:全栈弄潮儿 🏡 个人主页…...

Maven可选依赖和排除依赖简单使用
可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候,添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…...
“深入探索JVM:Java虚拟机的工作原理解析“
标题:深入探索JVM:Java虚拟机的工作原理解析 摘要:本文将深入探索Java虚拟机(JVM)的工作原理,从类加载、内存管理、垃圾回收、即时编译器等方面进行详细解析,帮助读者更好地理解JVM的内部机制。…...
Prometheus-各种exporter
文章目录 一、 nginx-prometheus-exporter1 nginx 配置1.1 Nginx 模块支持1.2 Nginx 配置文件配置2 部署 nginx-prometheus-exporter2.1 二进制方式部署2.1.1 解压部署2.1.2 配置 systemd2.1.3 添加 prometheus 的配置2.1.4 Dashborad2.2 docker-compose 方式部署3 可配置的指标…...

小程序的 weiui的使用以及引入
https://wechat-miniprogram.github.io/weui/docs/quickstart.html 网址 1.点进去,在app.json里面配置 在你需要的 页面的 json里面配置,按需引入 然后看文档,再在你的 wxml里面使用就好了...

git目录初始化,并拉取最新代码
现有C:\data目录,将目录初始化,并拉取代码在这里插入代码片 https://gitlab.arsbaibaodun.com/bcx_v5_app/baoan-hangyedcjg.git 1、 git init生成 .git 目录即目录初始化完成,可以进行拉取代码 代码成功拉取到了data目录,默认…...

运筹调度算法工程式招聘情况:技能要求、薪资、工作地
目录 一、前言二、岗位信息三、总结 一、前言 前一段时间,常看到运筹学的老师们在朋友圈转发下面的图片。今天忽然想起这件事,顺势查了一下“调度算法工程师”在Boss直聘上的岗位信息,也整理一下招聘企业所需的“调度”技能。 二、岗位信息…...

css2-BFC是什么?
1、BFC是什么? 在页面布局时,经常会出现以下几种情况: 这个元素高度怎末没了? 这两栏布局怎末没法自适应? 这两个元素的间距怎末有点奇怪的样子? … 原因就是元素之间互相影响,导致了意料之外的…...
Flutter Dart语言(04)库操作
0 说明 该系列教程主要是为有一定语言基础 C/C的程序员,快速学习一门新语言所采用的方法,属于在C/C基础上扩展新语言的模式。 1 自定义库 & 系统自定义库 引入代码如下所示: import xxx.dart; //自定义库引入,xxx为本…...

通向架构师的道路之漫谈使用ThreadLocal改进你的层次的划分
一、什么是ThreadLocal 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线…...
springboot全局统一返回处理
文章目录 前言一、统一的返回格式二、全局异常处理三、全局返回处理(装逼用的)总结 前言 项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式; 一、统一的返回格式 一般而言…...
C/C++面试经历(一)
目录 1. 说说你对C与C的认识? 2. 说说C的三大特性? 3. 说说C的重载? 4. C语言为什么不支持重载? 5. 说说类的默认成员函数? 6. 类的构造函数为什么不支持虚函数? 7. 说说你对指针和引用的理解&…...

【PostgreSQL】系列之 一 用户创建和授权(三)
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的…...

Python连接Hive实例教程
一 Python连接hive环境实例 经在网络查询相关的教程,发现有好多的例子,发现连接底层用的的驱动基本都是pyhive和pyhs2两种第三方库的来连接的 hive,下面将简介windows 10 python 3.10 连接hive的驱动程序方式,开发工具:pycharm …...

Jest和Mocha对比:两者之间有哪些区别?
目录 什么是单元测试? Jest和Mocha介绍 Jest Jest的特点: Jest的使用限制 Mocha Mocha的特点 使用Mocha的限制 Jest和Mocha的全面比较 我们应该使用哪个测试框架? 结论 什么是单元测试? 所谓单元测试,是对软…...
Oracle:merge into用法
文章目录 merge into使用场景merge into语法测试表普通模式 merge使用注意点 merge into MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入 比单独的 update insert 的方式效率要更高,尤…...

【数据结构OJ题】消失的数字
原题链接:https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一:排序遍历(下一个数不等于上一个数1,这个下一个数就是消失的数字)。 时…...
linux 隔离内核
1、 编辑grub gedit /etc/default/grub 2、修改 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash isolcpus1,3"(这里表示1和3两个cpu被隔离,cpu序号从0开始) or GRUB_CMDLINE_LINUX"isolcpus1,3" 3、update sudo update-grub 4、查看…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...