Go操作mongodb数据库方法示例

 更新时间:2023年09月04日 11:31:01   作者:guyan0319  
这篇文章主要为大家介绍了Go操作mongodb数据库方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

添加mongodb驱动程序

用于go get将 Go 驱动程序添加为依赖项。

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

使用方法

创建main.go 文件

package main
import (
    "context"
    "fmt"
    "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"
    "go.mongodb.org/mongo-driver/mongo/readpref"
    "log"
    "time"
)
// MongoDB 连接池
var MongoDBClient *mongo.Database
// pool 连接池模式
func ConnectToDBPool() {
    user := "admin"
    password := "12345678"
    host := "127.0.0.1"
    port := "27017"
    dbName := "demo"
    timeOut := 2
    maxNum := 50
    uri := fmt.Sprintf("mongodb://%s:%s@%s:%s/%s?w=majority", user, password, host, port, dbName)
    // 设置连接超时时间
    ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeOut))
    defer cancel()
    // 通过传进来的uri连接相关的配置
    o := options.Client().ApplyURI(uri)
    // 设置最大连接数 - 默认是100 ,不设置就是最大 max 64
    o.SetMaxPoolSize(uint64(maxNum))
    // 发起链接
    client, err := mongo.Connect(ctx, o)
    if err != nil {
        fmt.Println("ConnectToDB", err)
        return
    }
    // 判断服务是不是可用
    if err = client.Ping(context.Background(), readpref.Primary()); err != nil {
        fmt.Println("ConnectToDB", err)
        return
    }
    // 返回 client
    MongoDBClient = client.Database(dbName)
}
func ConnectToDB() {
    clientOptions := options.Client().ApplyURI("mongodb://admin:12345678@localhost:27017")
    var ctx = context.TODO()
    // Connect to MongoDB
    client, err := mongo.Connect(ctx, clientOptions)
    if err != nil {
        log.Fatal(err)
    }
    // Check the connection
    err = client.Ping(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Connected to MongoDB!")
    // 返回 client
    MongoDBClient = client.Database("demo")
    //defer client.Disconnect(ctx)
}
// 插入单条数据
func insertOne() {
    ash := Member{"13212345678", "123456", []string{"abc1", "efg1", "hij1"}}
    insertResult, err := MongoDBClient.Collection("test1").InsertOne(context.TODO(), ash)
    if err != nil {
        fmt.Println(err)
    }
    println("Inserted a single document: ", insertResult.InsertedID)
}
// 插入多条数据
func insert() {
    var ash []interface{}
    ash = append(ash, Member{"13222222222", "123456", []string{"aaa", "bbb", "ccc"}})
    ash = append(ash, Member{"13333333333", "123456", []string{"aaa1", "bbb1", "ccc1"}})
    fmt.Println(ash)
    insertResult, err := MongoDBClient.Collection("test1").InsertMany(context.TODO(), ash)
    if err != nil {
        fmt.Println(err)
    }
    println("Inserted Multiple document: ", insertResult.InsertedIDs)
}
// 查询单条
func findOne() {
    var result bson.M
    err := MongoDBClient.Collection("test1").FindOne(context.TODO(), bson.D{{"info", "aaa1"}}).Decode(&result)
    if err != nil {
        if err == mongo.ErrNoDocuments {
            //This error means your query did not match any documents.
            return
        }
        panic(err)
    }
    fmt.Println(result)
}
// 查询多条数据
func find() {
    findOptions := options.Find()
    findOptions.SetLimit(10)
    cur, err := MongoDBClient.Collection("test1").Find(context.TODO(), bson.D{{"phone", "13333333333"}}, findOptions)
    if err != nil {
        fmt.Println(err)
    }
    var results []*Member
    for cur.Next(context.TODO()) {
        // create a value into which the single document can be decoded
        var elem Member
        err := cur.Decode(&elem)
        if err != nil {
            fmt.Println(err)
        }
        results = append(results, &elem)
    }
    if err := cur.Err(); err != nil {
        fmt.Println(err)
    }
    //fmt.Println(results)
    for _, v := range results {
        fmt.Println(v.Phone)
        fmt.Println(v.Name)
        fmt.Println(v.Info)
    }
}
func updateOne() {
    //如果过滤的文档不存在,则插入新的文档
    opts := options.Update().SetUpsert(true)
    id, _ := primitive.ObjectIDFromHex("633b02b6e082e5046001d0b9")
    filter := bson.D{{"_id", id}}
    update := bson.D{{"$set", bson.D{{"phone", "1444444444444"}}}}
    result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update, opts)
    //result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}
func update() {
    filter := bson.D{{"name", "123456"}}
    update := bson.D{{"$set", bson.D{{"name", "张三"}}}}
    result, err := MongoDBClient.Collection("test1").UpdateMany(context.TODO(), filter, update)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}
// 替换文档
func replaceOne() {
    filter := bson.D{{"phone", "13222222222"}}
    replacement := bson.D{{"phone", "16666666666"}}
    result, err := MongoDBClient.Collection("test1").ReplaceOne(context.TODO(), filter, replacement)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}
// 删除单个文件
func deleteOne() {
    filter := bson.D{{"phone", "16666666666"}}
    result, err := MongoDBClient.Collection("test1").DeleteOne(context.TODO(), filter)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}
// 删除多个
func delete() {
    //filter := bson.D{{"runtime", bson.D{{"$gt", 800}}}}
    filter := bson.D{{"phone", "16666666666"}}
    results, err := MongoDBClient.Collection("test1").DeleteMany(context.TODO(), filter)
    if err != nil {
        panic(err)
    }
    fmt.Println(results)
}
type Member struct {
    Phone string
    Name  string
    Info  []string
}
func main() {
    //连接数据库
    ConnectToDB()
    //连接池连接数据库
    //ConnectToDBPool()
    //插入单条数据
    //insertOne()
    //插入多条数据
    //insert()
    //查找单条数据
    //findOne()
    //查找多条数据
    find()
    //修改单条数据
    //updateOne()
    //修改多条数据
    //update()
    //替换文档
    //replaceOne()
    // 删除多个
    //deleteOne()
    // 删除多个
    //delete()
}

links https://www.mongodb.com/docs/...

以上就是Go操作mongodb数据库方法示例的详细内容,更多关于Go操作mongodb的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言封装一个Cron定时任务管理器

    Go语言封装一个Cron定时任务管理器

    在现代应用中,定时任务是非常常见的需求,无论是用于定时清理数据,还是定时执行系统维护任务,下面我们就来使用Go语言封装一个Cron定时任务管理器吧
    2024-12-12
  • Go语言结合Gin框架快速实现分页查询接口

    Go语言结合Gin框架快速实现分页查询接口

    在开发 Web 应用时,分页查询 是非常常见的需求,在 Go 语言中,我们可以结合 GORM + Gin 框架,快速实现分页查询接口,下面我们来看看具体实现方法吧
    2025-08-08
  • gin框架Context如何获取Get Query Param函数数据

    gin框架Context如何获取Get Query Param函数数据

    这篇文章主要为大家介绍了gin框架Context Get Query Param函数获取数据,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Golang多个域名的跨域资源共享的实现

    Golang多个域名的跨域资源共享的实现

    本文主要介绍了Golang多个域名的跨域资源共享的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 解析golang 标准库template的代码生成方法

    解析golang 标准库template的代码生成方法

    这个项目的自动生成代码都是基于 golang 的标准库 template 的,所以这篇文章也算是对使用 template 库的一次总结,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-11-11
  • PHP和GO对接ChatGPT实现聊天机器人效果实例

    PHP和GO对接ChatGPT实现聊天机器人效果实例

    这篇文章主要为大家介绍了PHP和GO对接ChatGPT实现聊天机器人效果实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • go Cobra命令行工具入门教程

    go Cobra命令行工具入门教程

    Cobra是一个用Go语言实现的命令行工具并且现在正在被很多项目使用,例如:Kubernetes、Hugo和Github CLI等,通过使用Cobra,我们可以快速的创建命令行工具,特别适合写测试脚本,各种服务的Admin CLI等,本文重点给大家介绍go Cobra命令行工具,感兴趣的朋友一起看看吧
    2022-06-06
  • 解读go在遍历map过程中删除成员是否安全

    解读go在遍历map过程中删除成员是否安全

    在Go语言中,通过for range遍历map时可以安全地删除当前遍历到的元素,因为遍历过程中的删除操作不会影响遍历的进行,但需要注意,遍历顺序是不确定的,删除元素不会导致程序错误,但可能会影响剩余元素的遍历顺序,在多线程环境下
    2024-09-09
  • logrus hook输出日志到本地磁盘的操作

    logrus hook输出日志到本地磁盘的操作

    这篇文章主要介绍了logrus hook输出日志到本地磁盘的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Go实现List、Set、Stack、Deque等数据结构的操作方法

    Go实现List、Set、Stack、Deque等数据结构的操作方法

    Go语言团队的一个核心目标是保持语言的简单性,他们认为,如果一个功能可以用简单的组合来实现,那就没有必要把它放进标准库里,本文给大家介绍Go实现List、Set、Stack、Deque等数据结构的操作方法,感兴趣的朋友跟随小编一起看看吧
    2024-12-12

最新评论