golang 操作mongodb实现CRUD

483 阅读1分钟

golang 操作mongodb实现CRUD

首先使用docker创建mongodb

新建docker-compose文件

 version: '3'
 
 services:
   mongo: #服务的名字
     image: mongo #对应的docker镜像的名字,可指定版本,如mongo:1.0,不指定则为最新版
     container_name: mongo-1 #docker容器的名字
     restart: always #当docker重启时,容器自动启动。
     environment: #容器内部默认的设置
       MONGO_INITDB_ROOT_USERNAME: root #mongo默认的账号
       MONGO_INITDB_ROOT_PASSWORD: root #mongo默认的密码
     ports: #容器运行的端口号和对应的容器内部的端口号
       - 27017:27017
     volumes: # 数据持久化
       - ./mongodb-data:/data/db
     command: [ --auth ] # 指定需要认证,mongdb默认是无认证的

在终端输入:

 $ docker-compose up -d

引入mongo-driver

 $ go get go.mongodb.org/mongo-driver/mongo

golang实现mongo的crud

 package main
 ​
 import (
   "context"
   "fmt"
   "log"
   "time"
 ​
   "go.mongodb.org/mongo-driver/bson"
   "go.mongodb.org/mongo-driver/mongo"
   "go.mongodb.org/mongo-driver/mongo/options"
 )
 ​
 type Person struct {
   Name  string
   Age   int
   Email string
 }
 ​
 func main() {
   // 建立MongoDB连接
   client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://root:root@localhost:27017"))
   if err != nil {
     log.Fatal(err)
   }
 ​
   ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
   defer cancel()
 ​
   err = client.Connect(ctx)
   if err != nil {
     log.Fatal(err)
   }
 ​
   // 获取数据库和集合对象
   db := client.Database("testdb")
   collection := db.Collection("persons")
 ​
   // 插入文档
   person := Person{Name: "Alice", Age: 25, Email: "alice@example.com"}
   insertResult, err := collection.InsertOne(ctx, person)
   if err != nil {
     log.Fatal(err)
   }
   fmt.Println("Inserted document ID:", insertResult.InsertedID)
 ​
   // 查询文档
   filter := bson.M{"name": "Alice"}
   var result Person
   err = collection.FindOne(ctx, filter).Decode(&result)
   if err != nil {
     log.Fatal(err)
   }
   fmt.Println("Found document:", result)
 ​
   // 更新文档
   update := bson.M{"$set": bson.M{"age": 26}}
   updateResult, err := collection.UpdateOne(ctx, filter, update)
   if err != nil {
     log.Fatal(err)
   }
   fmt.Println("Matched count:", updateResult.MatchedCount)
   fmt.Println("Modified count:", updateResult.ModifiedCount)
 ​
   // 删除文档
   deleteResult, err := collection.DeleteOne(ctx, filter)
   if err != nil {
     log.Fatal(err)
   }
   fmt.Println("Deleted count:", deleteResult.DeletedCount)
 ​
   // 关闭连接
   err = client.Disconnect(ctx)
   if err != nil {
     log.Fatal(err)
   }
   fmt.Println("Disconnected from MongoDB")
 }
 ​

输出:

 Inserted document ID: ObjectID("6455cc6dcee8a1a17cde65cf")
 Found document: {Alice 25 alice@example.com}
 Matched count: 1
 Modified count: 1
 Deleted count: 1
 Disconnected from MongoDB
 ​