MongoDB集成 #

一、安装配置 #

1.1 安装依赖 #

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

1.2 连接MongoDB #

go
package database

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

func ConnectMongo(uri string) (*mongo.Client, error) {
    client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(uri))
    if err != nil {
        return nil, err
    }
    
    err = client.Ping(context.Background(), nil)
    return client, err
}

func GetCollection(client *mongo.Client, dbName, collectionName string) *mongo.Collection {
    return client.Database(dbName).Collection(collectionName)
}

二、模型定义 #

go
package models

import "go.mongodb.org/mongo-driver/bson/primitive"

type User struct {
    ID       primitive.ObjectID `bson:"_id,omitempty" json:"id"`
    Name     string             `bson:"name" json:"name"`
    Email    string             `bson:"email" json:"email"`
    Age      int                `bson:"age" json:"age"`
    Active   bool               `bson:"active" json:"active"`
    Tags     []string           `bson:"tags" json:"tags"`
}

三、CRUD操作 #

3.1 创建 #

go
func CreateUser(ctx context.Context, col *mongo.Collection, user *models.User) error {
    result, err := col.InsertOne(ctx, user)
    if err != nil {
        return err
    }
    
    user.ID = result.InsertedID.(primitive.ObjectID)
    return nil
}

3.2 查询 #

go
func GetUserByID(ctx context.Context, col *mongo.Collection, id primitive.ObjectID) (*models.User, error) {
    var user models.User
    err := col.FindOne(ctx, bson.M{"_id": id}).Decode(&user)
    return &user, err
}

func GetUsers(ctx context.Context, col *mongo.Collection, filter bson.M) ([]models.User, error) {
    cursor, err := col.Find(ctx, filter)
    if err != nil {
        return nil, err
    }
    defer cursor.Close(ctx)
    
    var users []models.User
    if err := cursor.All(ctx, &users); err != nil {
        return nil, err
    }
    
    return users, nil
}

3.3 更新 #

go
func UpdateUser(ctx context.Context, col *mongo.Collection, id primitive.ObjectID, update bson.M) error {
    _, err := col.UpdateOne(ctx, bson.M{"_id": id}, bson.M{"$set": update})
    return err
}

3.4 删除 #

go
func DeleteUser(ctx context.Context, col *mongo.Collection, id primitive.ObjectID) error {
    _, err := col.DeleteOne(ctx, bson.M{"_id": id})
    return err
}

四、总结 #

4.1 MongoDB特点 #

特点 说明
文档存储 JSON格式数据
灵活模式 无固定表结构
高性能 读写速度快
易扩展 支持分片

4.2 下一步 #

现在你已经掌握了MongoDB集成,接下来让我们学习 单元测试,了解Fiber应用的测试方法!

最后更新:2026-03-28