Go Mongo查询多条结果赋值给Struct代码示范

45 min read

以下是一个示例代码,通过 Go 使用 Mongo 查询多条结果并将它们赋值给一个自定义的 Struct:

package main

import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "log"
)

type Person struct {
    Name    string
    Age     int
    Address string
}

func main() {
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
    client, err := mongo.Connect(context.Background(), clientOptions)
    if err != nil {
        log.Fatal(err)
    }

    collection := client.Database("testdb").Collection("people")

    // 构建查询条件,查询所有年龄大于等于18岁的人
    filter := bson.D{{"age", bson.D{{"$gte", 18}}}}

    // 发起查询请求并获取结果
    cur, err := collection.Find(context.Background(), filter)
    if err != nil {
        log.Fatal(err)
    }

    defer cur.Close(context.Background())

    // 遍历结果并将其赋值给Person Struct
    var people []Person
    for cur.Next(context.Background()) {
        var person Person
        err := cur.Decode(&person)
        if err != nil {
            log.Fatal(err)
        }

        people = append(people, person)
    }

    if err := cur.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(people)
}

在上面的代码中,我们首先建立了一个连接到 Mongo 数据库的客户端。然后,我们在 testdb 中选择了一个 people 集合,并使用 bson.D 构建了 our 的查询过滤条件。接下来,我们使用 collection.Find() 方法发起了查询请求,获取了一个游标 cur。我们使用 cur.Next() 遍历了游标中的每条查询结果,并使用 cur.Decode() 将其解码为一个 Person Struct。最后,我们将所有的 Person Struct 添加到一个切片中并输出它。

注意,在这个例子中,我们将查询的结果赋值给了一个自定义的 Person Struct。如果你有不同的需求,可以创建其他自定义 Struct,并通过类似的方式将查询的结果赋值给它们。