当前位置:   article > 正文

Go语言实战-golang操作Mongodb_golang mongodb bson

golang mongodb bson

上一篇文章中提到,使用MySQL存储nginx的处理数据,已经使MySQL处于高并发状态,那么针对这种高并发、海量的数据有没有更合适的存储工具呢?

工欲善其事必先利其器,对各种工具我们都要有所了解,才能在技术选型时,做出更优的方案。

这里对MongoDB做个抛砖引玉的介绍,增删改查

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "go.mongodb.org/mongo-driver/bson"
  7. "go.mongodb.org/mongo-driver/mongo"
  8. "go.mongodb.org/mongo-driver/mongo/options"
  9. )
  10. type Student struct {
  11. Name string `bson:"name"`
  12. Age int `bson:"age"`
  13. }
  14. func main() {
  15. // 设置客户端连接配置, mongodb://用户名:密码@host:port/数据库
  16. clientOptions := options.Client().ApplyURI("mongodb://root:root123@localhost:27017/admin")
  17. // 连接到MongoDB
  18. client, err := mongo.Connect(context.TODO(), clientOptions)
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. // 检查连接
  23. err = client.Ping(context.TODO(), nil)
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. fmt.Println("Connected to MongoDB!")
  28. // 指定获取要操作的数据集
  29. collection := client.Database("test").Collection("c1")
  30. // 插入文档
  31. insert(collection)
  32. // 修改文档
  33. update(collection)
  34. // 查找文档
  35. read(collection)
  36. // 删除文档
  37. delete(collection)
  38. // 断开连接
  39. err = client.Disconnect(context.TODO())
  40. if err != nil {
  41. log.Fatal(err)
  42. }
  43. fmt.Println("Connection to MongoDB closed.")
  44. }
  45. func insert(collection *mongo.Collection) {
  46. s1 := Student{"欧阳修", 12}
  47. s2 := Student{"辛弃疾", 10}
  48. s3 := Student{"白居易", 11}
  49. // 插入一条数据
  50. insertResult, err := collection.InsertOne(context.TODO(), s1)
  51. if err != nil {
  52. log.Fatal(err)
  53. }
  54. fmt.Println("Insert one docments success: ", insertResult.InsertedID)
  55. // 插入多条数据
  56. students := []interface{}{s2, s3}
  57. insertManyResult, err := collection.InsertMany(context.TODO(), students)
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. fmt.Println("Inserted multiple documents success: ", insertManyResult.InsertedIDs)
  62. }
  63. func update(collection *mongo.Collection) {
  64. // 将李白的年龄增加1
  65. filter := bson.M{"name": "李白"}
  66. update := bson.M{
  67. "$inc": bson.M{
  68. "age": 1,
  69. },
  70. }
  71. updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
  72. if err != nil {
  73. log.Fatal(err)
  74. }
  75. fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
  76. }
  77. func read(collection *mongo.Collection) {
  78. // 查找李白的文档
  79. filter := bson.M{"name": "李白"}
  80. // 创建一个Student变量用来接收查询的结果
  81. var result Student
  82. err := collection.FindOne(context.TODO(), filter).Decode(&result)
  83. if err != nil {
  84. log.Fatal(err)
  85. }
  86. fmt.Printf("Found a single document: %+v\n", result)
  87. // 查询多个
  88. // 将选项传递给Find()
  89. findOptions := options.Find()
  90. findOptions.SetLimit(2)
  91. // 定义一个切片用来存储查询结果
  92. var results []*Student
  93. // 把bson.D{{}}作为一个filter来匹配所有文档
  94. cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)
  95. if err != nil {
  96. log.Fatal(err)
  97. }
  98. // 查找多个文档返回一个光标
  99. // 遍历游标允许我们一次解码一个文档
  100. for cur.Next(context.TODO()) {
  101. // 创建一个值,将单个文档解码为该值
  102. var elem Student
  103. err := cur.Decode(&elem)
  104. if err != nil {
  105. log.Fatal(err)
  106. }
  107. results = append(results, &elem)
  108. }
  109. if err := cur.Err(); err != nil {
  110. log.Fatal(err)
  111. }
  112. // 完成后关闭游标
  113. cur.Close(context.TODO())
  114. fmt.Printf("Found multiple documents (array of pointers): %#v\n", results)
  115. }
  116. func delete(collection *mongo.Collection) {
  117. // 删除名字是杜甫的文档
  118. deleteResult1, err := collection.DeleteOne(context.TODO(), bson.M{"name": "杜甫"})
  119. if err != nil {
  120. log.Fatal(err)
  121. }
  122. fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult1.DeletedCount)
  123. // 删除所有
  124. // deleteResult2, err := collection.DeleteMany(context.TODO(), bson.D{{}})
  125. // if err != nil {
  126. // log.Fatal(err)
  127. // }
  128. // fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult2.DeletedCount)
  129. }

MongoDB的增删改查看的不过瘾,请移步

MongoDB 教程 | 菜鸟教程MongoDB 教程 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 现在开始学习 MongoDB! 内容列表 NoSQL 简介介绍NoSQL基础概念。 MongoDB 简介介绍MongoDB基础概念。 w..https://www.runoob.com/mongodb/mongodb-tutorial.html能看到这也是缘分,再推荐一个很好用的MongoDB开源的可视化工具RoTo 3T

 考虑到官网下载极慢,这里放在百度网盘了

链接:https://pan.baidu.com/s/13ZHuSioEDjv8b_NeAgdtXQ 
提取码:roto

代码已放码云

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/639152
推荐阅读
相关标签
  

闽ICP备14008679号