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