Golang操作MongoDB

397 阅读1分钟

以下是使用 Golang 和 MongoDB 官方驱动程序(mongo-go-driver)实现增删改查的示例代码:

package main

import (
    "context"
    "fmt"
    "log"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

type Person struct {
    Name    string `bson:"name"`
    Age     int    `bson:"age"`
    Address string `bson:"address"`
}

func main() {
    // 创建一个 MongoDB 客户端连接
    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
    if err != nil {
        log.Fatal(err)
    }

    // 创建一个上下文对象
    ctx := context.Background()

    // 连接到 MongoDB 服务
    err = client.Connect(ctx)
    if err != nil {
        log.Fatal(err)
    }

    // 获取要操作的集合
    collection := client.Database("testdb").Collection("persons")

    // 插入数据
    p1 := Person{Name: "Tom", Age: 20, Address: "Shanghai"}
    _, err = collection.InsertOne(ctx, p1)
    if err != nil {
        log.Fatal(err)
    }

    // 查询数据
    var p2 Person
    err = collection.FindOne(ctx, bson.M{"name": "Tom"}).Decode(&p2)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Name: %s, Age: %d, Address: %s\n", p2.Name, p2.Age, p2.Address)

    // 更新数据
    filter := bson.M{"name": "Tom"}
    update := bson.M{"$set": bson.M{"age": 25}}
    _, err = collection.UpdateOne(ctx, filter, update)
    if err != nil {
        log.Fatal(err)
    }

    // 删除数据
    _, err = collection.DeleteOne(ctx, bson.M{"name": "Tom"})
    if err != nil {
        log.Fatal(err)
    }

    // 断开连接
    err = client.Disconnect(ctx)
    if err != nil {
        log.Fatal(err)
    }
}

这个例子定义了一个 Person 结构体来表示 MongoDB 集合中的文档。在 main 函数中,首先创建一个 MongoDB 客户端连接,并连接到 MongoDB 服务。然后,获取要操作的集合,执行插入、查询、更新和删除操作,最后断开连接。