c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

golang查询mongo

李中冰 2023-07-11编程经验
介绍Go语言具有卓越的并发编程特性和性能,而MongoDB是一种流行的、高性能的NoSQL数据库,它的部署和横向扩展是非常容易的,这使得它在现代应用程序中非常有用,本篇文章中我们将学

介绍

Go语言具有卓越的并发编程特性和性能,而MongoDB是一种流行的、高性能的NoSQL数据库,它的部署和横向扩展是非常容易的,这使得它在现代应用程序中非常有用,本篇文章中我们将学习使用Go语言进行MongoDB的查询。在本文中,我们将使用mongod驱动程序。

连接MongoDB

为了使用mongoDb,首先我们需要安装MongoDB驱动,go get命令可用于直接从命令行进行安装,下面让我们来安装mysql驱动和连接数据库:

    package main

    import (
        "gopkg.in/mgo.v2"
        "log"
    )

    const (
        DBHost = "localhost:27017"
    )

    func main() {

        //创建连接
        session, err := mgo.Dial(DBHost)
        if err != nil {
            panic(err)
        }

        defer session.Close()

        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)

        //我们现在已经成功连接到了MongoDB。
        log.Println("Connected to MongoDB!")
    }

查询数据

使用mgo库查询数据非常简单,您只需要指定想要查询的数据库和集合的名称,然后使用Find()函数。在Find()函数后面可以使用可选参数Sort()Lmit()Skip(),以获取有序的数据或限制返回的文档数量。

    package main

    import (
        "fmt"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
        "log"
    )

    const (
        DBHost = "localhost:27017"
        DBName = "test"
        DBUser = "root"
        DBPass = "root"
    )

    type Person struct {
        Name     string
        Age      int
        Location string
    }

    func main() {

        //连接Mongodb
        session, err := mgo.Dial(DBHost)
        if err != nil {
            panic(err)
        }
        defer session.Close()

        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)

        //获取集合
        collection := session.DB(DBName).C("people")

        //定义筛选条件
        query := bson.M{"age": bson.M{"$gte": 18}}

        //查询
        var results []Person
        err = collection.Find(query).All(&results)
        if err != nil {
            panic(err)
        }

        //获取结果
        for i, result := range results {
            fmt.Println(i, result)
        }
    }

删除数据

想要删除一个文档或者匹配一些特定的条件时,mgo驱动程序为您提供了Remove()函数。您可以使用多种不同的条件来删除文档,这在MongoDB中是非常方便的。

    package main

    import (
        "fmt"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
        "log"
    )

    const (
        DBHost = "localhost:27017"
        DBName = "test"
        DBUser = "root"
        DBPass = "root"
    )

    type Person struct {
        Name     string
        Age      int
        Location string
    }

    func main() {

        //连接Mongodb
        session, err := mgo.Dial(DBHost)
        if err != nil {
            panic(err)
        }
        defer session.Close()

        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)

        //获取集合
        collection := session.DB(DBName).C("people")

        //定义筛选条件
        query := bson.M{"age": bson.M{"$gte": 18}}

        //删除文档
        info, err := collection.RemoveAll(query)
        if err != nil {
            panic(err)
        }

        fmt.Println(info)
    }

更新数据

使用mgo驱动程序,我们可以很容易地更新MongoDB中的文档。您可以使用Update()函数来修改一个现有文档。mgo库在Update()方法后面提供了一系列可选的参数,这些可选参数非常有用,以控制您的数据更新。

    package main

    import (
        "fmt"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
        "log"
    )

    const (
        DBHost = "localhost:27017"
        DBName = "test"
        DBUser = "root"
        DBPass = "root"
    )

    type Person struct {
        Name     string
        Age      int
        Location string
    }

    func main() {

        //连接Mongodb
        session, err := mgo.Dial(DBHost)
        if err != nil {
            panic(err)
        }
        defer session.Close()

        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)

        //获取集合
        collection := session.DB(DBName).C("people")

        //定义筛选条件和修改文档
        query := bson.M{"name": "Tom"}
        update := bson.M{"$set": bson.M{"location": "Beijing"}}

        //更新文档
        err = collection.Update(query, update)
        if err != nil {
            panic(err)
        }

        //验证结果
        results := Person{}
        err = collection.Find(query).One(&results)
        if err != nil {
            panic(err)
        }

        fmt.Println(results)
    }

文章评论