当前位置: 首页 > news >正文

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的时候&#xff0c;添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…...

“深入探索JVM:Java虚拟机的工作原理解析“

标题&#xff1a;深入探索JVM&#xff1a;Java虚拟机的工作原理解析 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;从类加载、内存管理、垃圾回收、即时编译器等方面进行详细解析&#xff0c;帮助读者更好地理解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.点进去&#xff0c;在app.json里面配置 在你需要的 页面的 json里面配置&#xff0c;按需引入 然后看文档&#xff0c;再在你的 wxml里面使用就好了...

git目录初始化,并拉取最新代码

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

运筹调度算法工程式招聘情况:技能要求、薪资、工作地

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

css2-BFC是什么?

1、BFC是什么&#xff1f; 在页面布局时&#xff0c;经常会出现以下几种情况&#xff1a; 这个元素高度怎末没了&#xff1f; 这两栏布局怎末没法自适应&#xff1f; 这两个元素的间距怎末有点奇怪的样子&#xff1f; … 原因就是元素之间互相影响&#xff0c;导致了意料之外的…...

Flutter Dart语言(04)库操作

0 说明 该系列教程主要是为有一定语言基础 C/C的程序员&#xff0c;快速学习一门新语言所采用的方法&#xff0c;属于在C/C基础上扩展新语言的模式。 1 自定义库 & 系统自定义库 引入代码如下所示&#xff1a; import xxx.dart; //自定义库引入&#xff0c;xxx为本…...

通向架构师的道路之漫谈使用ThreadLocal改进你的层次的划分

一、什么是ThreadLocal 早在JDK 1.2的版本中就提供java.lang.ThreadLocal&#xff0c;ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal很容易让人望文生义&#xff0c;想当然地认为是一个“本地线…...

springboot全局统一返回处理

文章目录 前言一、统一的返回格式二、全局异常处理三、全局返回处理(装逼用的)总结 前言 项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式; 一、统一的返回格式 一般而言…...

C/C++面试经历(一)

目录 1. 说说你对C与C的认识&#xff1f; 2. 说说C的三大特性&#xff1f; 3. 说说C的重载&#xff1f; 4. C语言为什么不支持重载&#xff1f; 5. 说说类的默认成员函数&#xff1f; 6. 类的构造函数为什么不支持虚函数&#xff1f; 7. 说说你对指针和引用的理解&…...

【PostgreSQL】系列之 一 用户创建和授权(三)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…...

Python连接Hive实例教程

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

Jest和Mocha对比:两者之间有哪些区别?

目录 什么是单元测试&#xff1f; Jest和Mocha介绍 Jest Jest的特点&#xff1a; Jest的使用限制 Mocha Mocha的特点 使用Mocha的限制 Jest和Mocha的全面比较 我们应该使用哪个测试框架&#xff1f; 结论 什么是单元测试&#xff1f; 所谓单元测试&#xff0c;是对软…...

Oracle:merge into用法

文章目录 merge into使用场景merge into语法测试表普通模式 merge使用注意点 merge into MERGE 是 Oracle9i 新增的语法&#xff0c;根据源表对目标表进行匹配查询&#xff0c;匹配成功时更新&#xff0c;不成功时插入 比单独的 update insert 的方式效率要更高&#xff0c;尤…...

【数据结构OJ题】消失的数字

原题链接&#xff1a;https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一&#xff1a;排序遍历&#xff08;下一个数不等于上一个数1&#xff0c;这个下一个数就是消失的数字&#xff09;。 时…...

linux 隔离内核

1、 编辑grub gedit /etc/default/grub 2、修改 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash isolcpus1,3"&#xff08;这里表示1和3两个cpu被隔离,cpu序号从0开始&#xff09; or GRUB_CMDLINE_LINUX"isolcpus1,3" 3、update sudo update-grub 4、查看…...

IO学习-有名管道

1&#xff0c;要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印 B进程再回复一句话给A进程&#xff0c;A进程接收后打印 重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 运行结果&#xff1a;...

小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(三)

本文主要以SpringBoot微服务架构为基础&#xff0c;提出了前后端分离的MVVM模型&#xff0c;并对其进行了详细的分析以及研究&#xff0c;以此为相关领域的工作人员提供一定的技术性参考。 目录 6 互联网应用开发架构分析 6.1 微服务架构与单体架构 6.1.1 系统更改部署 6.1…...

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合&#xff0c;一般是图像、文字、声音等多种结合&#xff0c;所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念&#xff0c;主要是指文字、图形、图像、声音等多种…...

Teams Room视频会议室方案

需求背景&#xff1a; 适合在40平米的会议室参加Teams视频会议&#xff0c;会议桌周围可以坐20人&#xff0c;要求&#xff1a; 1&#xff0c;操作简单&#xff0c;一键入会Teams Room&#xff1b; 2&#xff0c;任何人带上自己的笔记本电脑&#xff0c;可以分享电脑画面&#…...

C# 委托、事件、特性程序

委托和事件 public partial class Form1 : Form { public Form1() { InitializeComponent(); Man man new Man("小明"); Roommate[] roommates { new Roommate("小张"), new Roommate("小朱"), …...

MapTR论文笔记

MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 目的 传统高精地图 通过一些离线的基于 SLAM 的方法生成&#xff0c;需要复杂的流程以及高昂的维护费用。基于 bev 分割的建图方法&#xff0c;缺少向量化 实例级的信息&#xff0c;比如…...

JS进阶-Day4

&#x1f954;&#xff1a;流水不争先争滔滔不绝 JS进阶-Day1——点击此处&#xff08;作用域、函数、解构赋值等&#xff09; JS进阶-Day2——点击此处&#xff08;深入对象之构造函数、实例成员、静态成员等&#xff1b;内置构造函数之引用类型、包装类型等&#xff09; JS进…...

【C语言】初阶完结练习题

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;C语言初阶 ✨其他专栏&#xff1a;代码小游戏 &#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论…...

c++类与对象详解

c类与对象详解 对象类方法自定义类型类的特性this类的六个默认成员函数static成员友元内部类 对象 在C中&#xff0c;对象是类的实例。定义对象的语法为&#xff1a; <class_name> object_name;其中&#xff0c;class_name 是定义类时指定的类名&#xff0c;object_nam…...

I/O 函数/缓存和字节流、占位符、getchar(),putchar()

I/O 函数 C 语言提供了一些函数&#xff0c;用于与外部设备通信&#xff0c;称为输入输出函数&#xff0c;简称 I/O 函数。输入&#xff08;import&#xff09;指的是获取外部数据&#xff0c;输出&#xff08;export&#xff09;指的是向外部传递数据。 缓存和字节流 严格地…...