Go语言操作MongoDB:使用官方驱动实现增删改查
本文提供使用Go语言标准官方驱动连接和操作MongoDB的完整示例,包括依赖管理、建立连接、批量插入数据以及按条件查询记录的正确姿势。
准备环境
过去常用的 mgo 库已不再维护,目前推荐使用官方发布的 go.mongodb.org/mongo-driver。在开始编写代码前,请确保本地已安装Go环境和MongoDB服务(默认端口 127.0.0.1:27017)。
第1步:安装官方驱动
在项目目录下初始化模块并安装驱动:
go mod init myapp
go get go.mongodb.org/mongo-driver/mongo
完整操作示例
以下示例演示了如何定义结构体、连接数据库、插入多条数据并执行查询。该代码基于最新的官方API重写,修正了旧版 mgo 库中存在的语法限制和依赖问题。
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// Mail 定义集合结构
type Mail struct {
ID string `bson:"_id"`
Name string `bson:"name"`
Email string `bson:"email"`
}
func main() {
// 1. 设置客户端选项和上下文
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
clientOptions := options.Client().ApplyURI("mongodb://127.0.0.1:27017")
// 2. 连接到MongoDB
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
log.Fatal(err)
}
defer func() { _ = client.Disconnect(ctx) }()
// 验证连接
if err := client.Ping(ctx, nil); err != nil {
log.Fatal("Ping failed: ", err)
}
fmt.Println("Successfully connected!")
// 3. 获取集合引用
collection := client.Database("test").Collection("mail")
// 4. 插入数据
m1 := Mail{ID: "id1", Name: "user1", Email: "user1@example.com"}
m2 := Mail{ID: "id2", Name: "user1", Email: "user2@example.com"}
m3 := Mail{ID: "id3", Name: "user3", Email: "user3@example.com"}
insertDocs := []interface{}{m1, m2, m3}
result, err := collection.InsertMany(ctx, insertDocs)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted %d documents\n", len(result.InsertedIDs))
// 5. 查询数据
filter := bson.M{"name": "user3"}
cursor, err := collection.Find(ctx, filter)
if err != nil {
log.Fatal(err)
}
defer cursor.Close(ctx)
var results []Mail
if err = cursor.All(ctx, &results); err != nil {
log.Fatal(err)
}
for _, r := range results {
fmt.Printf("Name: %s, Email: %s\n", r.Name, r.Email)
}
}
关键步骤解析
- 上下文控制(Context):所有MongoDB操作都支持Context,用于设置超时时间和取消信号,防止程序挂起。
- BSON序列化:使用
go.mongodb.org/mongo-driver/bson处理文档转换,注意结构体标签需正确对应数据库字段名。 - 连接复用:
mongo.Client是线程安全的,适合在应用生命周期内复用,而不是每次请求都新建连接。
完成判断
运行上述代码后,若终端输出 Successfully connected! 及插入/查询结果,说明Go已成功连接并操作MongoDB。检查MongoDB实例中的 test.mail 集合,应包含新增的文档。
排错指南
- 连接拒绝:若提示 “connection refused”,请检查MongoDB服务是否启动(
systemctl status mongod或docker ps)。 - 认证失败:如果开启了认证,需在URI中添加用户名密码参数,如
mongodb://user:pass@localhost。 - 版本不兼容:确保Go版本 >= 1.18,MongoDB服务器版本较新时可能需要调整驱动版本。
以上就是Golang操作MongoDB的详细方法,更多关于Go语言数据库交互的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













