热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在mongodb中使用golang驱动

如何在mongodb中使用golang驱动?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个

如何在mongodb中使用golang驱动?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

使用教程如下:

导入

go get github.com/mongodb/mongo-go-driver/mongo

链接mongo服务

if client, err = mongo.Connect(getContext(), url); err != nil {
  checkErr(err)
 }

判断服务是否可用

if err = client.Ping(getContext(), readpref.Primary()); err != nil {
  checkErr(err)
 }

选择数据库和集合

collection = client.Database("testing_base").Collection("howie")

删除这个集合

collection.Drop(getContext())

插入一条数据

if insertOneRes, err = collection.InsertOne(getContext(), howieArray[0]); err != nil {
  checkErr(err)
 }
 fmt.Printf("InsertOne插入的消息ID:%v\n", insertOneRes.InsertedID)

批量插入数据

if insertManyRes, err = collection.InsertMany(getContext(), howieArray); err != nil {
  checkErr(err)
 }
 fmt.Printf("InsertMany插入的消息ID:%v\n", insertManyRes.InsertedIDs)

查询单条数据

if err = collection.FindOne(getContext(), bson.D{{"name", "howie_2"}, {"age", 11}}).Decode(&howie); err != nil {
  checkErr(err)
 }
 fmt.Printf("FindOne查询到的数据:%v\n", howie)

查询单条数据后删除该数据

if err = collection.FindOneAndDelete(getContext(), bson.D{{"name", "howie_3"}}).Decode(&howie); err != nil {
  checkErr(err)
 }
 fmt.Printf("FindOneAndDelete查询到的数据:%v\n", howie)

询单条数据后修改该数据

if err = collection.FindOneAndUpdate(getContext(), bson.D{{"name", "howie_4"}}, bson.M{"$set": bson.M{"name": "这条数据我需要修改了"}}).Decode(&howie); err != nil {
  checkErr(err)
 }
 fmt.Printf("FindOneAndUpdate查询到的数据:%v\n", howie)

查询单条数据后替换该数据(以前的数据全部清空)

if err = collection.FindOneAndReplace(getContext(), bson.D{{"name", "howie_5"}}, bson.M{"hero": "这条数据我替换了"}).Decode(&howie); err != nil {
  checkErr(err)
 }
 fmt.Printf("FindOneAndReplace查询到的数据:%v\n", howie)

一次查询多条数据(查询createtime>=3,限制取2条,createtime从大到小排序的数据)

if cursor, err = collection.Find(getContext(), bson.M{"createtime": bson.M{"$gte": 2}}, options.Find().SetLimit(2), options.Find().SetSort(bson.M{"createtime": -1})); err != nil {
  checkErr(err)
 }
 if err = cursor.Err(); err != nil {
  checkErr(err)
 }
 defer cursor.Close(context.Background())
 for cursor.Next(context.Background()) {
  if err = cursor.Decode(&howie); err != nil {
   checkErr(err)
  }
  howieArrayEmpty = append(howieArrayEmpty, howie)
 }
 fmt.Printf("Find查询到的数据:%v\n", howieArrayEmpty)

查询集合里面有多少数据

if size, err = collection.Count(getContext(), nil); err != nil {
  checkErr(err)
 }
 fmt.Printf("Count里面有多少条数据:%d\n", size)

查询集合里面有多少数据(查询createtime>=3的数据)

if size, err = collection.Count(getContext(), bson.M{"createtime": bson.M{"$gte": 3}}); err != nil {
  checkErr(err)
 }
 fmt.Printf("Count里面有多少条数据:%d\n", size)

修改一条数据

if updateRes, err = collection.UpdateOne(getContext(), bson.M{"name": "howie_2"}, bson.M{"$set": bson.M{"name": "我要改了他的名字"}}); err != nil {
  checkErr(err)
 }
 fmt.Printf("UpdateOne的数据:%d\n", updateRes)

修改多条数据

if updateRes, err = collection.UpdateMany(getContext(), bson.M{"createtime": bson.M{"$gte": 3}}, bson.M{"$set": bson.M{"name": "我要批量改了他的名字"}}); err != nil {
  checkErr(err)
 }
 fmt.Printf("UpdateMany的数据:%d\n", updateRes)

删除一条数据

if delRes, err = collection.DeleteOne(getContext(), bson.M{"name": "howie_1"}); err != nil {
  checkErr(err)
 }
 fmt.Printf("DeleteOne删除了多少条数据:%d\n", delRes.DeletedCount)

删除多条数据

if delRes, err = collection.DeleteMany(getContext(), bson.M{"createtime": bson.M{"$gte": 7}}); err != nil {
  checkErr(err)
 }
 fmt.Printf("DeleteMany删除了多少条数据:%d\n", delRes.DeletedCount)

看完上述内容,你们掌握如何在mongodb中使用golang驱动的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程笔记行业资讯频道,感谢各位的阅读!


推荐阅读
  • AndroidJetpackNavigation基本使用本篇主要介绍一下AndroidJetpack组件Navigation导航组件的基本使用当看到Navigation单词的时候应 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • 数据库技术:execute immediate
    首先在这里发发牢骚,指责下那些刻板的书写方式,不考虑读者理不理解,感觉就是给专业人员用来复习用的一样,没有前戏,直接就高潮,实在受不了!没基础或基础差的完全不知道发生了什么,一脸懵 ... [详细]
  • Whatisannotation?annotation的中文意思就是注解,注释的意思。注解也属于一种类型。它是在JavaSE5.0版本中开始引入的概念。它的形式跟接口很类似,不过前 ... [详细]
author-avatar
sdfsadfwforever
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有