go操作mongodb
依赖
go get go.mongodb.org/mongo-driver/mongo
实例
package daily
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
var (
MongoClient *mongo.Client
)
func initMongoDB() error {
var err error
uri := "mongodb://localhost:27017"
clientOptions := options.Client().ApplyURI(uri)
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
return err
}
if err = client.Ping(context.TODO(), nil); err != nil {
return err
}
MongoClient = client
return err
}
func MongodbOp() {
type myUser struct {
Name string `bson:"Name"`
Age uint `bson:"Age"`
}
err := initMongoDB()
if err != nil {
fmt.Println("mongoDB连接失败=" + err.Error())
return
} else {
fmt.Println("mongoDB连接成功")
}
collection := MongoClient.Database("go_db").Collection("user")
ms := myUser{Name: "xyz", Age: 10}
one, err := collection.InsertOne(context.TODO(), ms)
if err != nil {
fmt.Println("单个新增失败=" + err.Error())
return
}
fmt.Println("单个新增成功id=", one.InsertedID)
msl := []interface{}{
myUser{Name: "x1", Age: 11},
myUser{Name: "x2", Age: 12},
}
many, err := collection.InsertMany(context.TODO(), msl)
if err != nil {
fmt.Println("批量插入失败=", err.Error())
return
}
fmt.Println("批量插入成功=", many.InsertedIDs, len(many.InsertedIDs))
findOptions := options.Find()
findOptions.SetLimit(2)
cur, err := collection.Find(context.TODO(), bson.D{}, findOptions)
if err != nil {
fmt.Println("查询异常-获取游标失败=" + err.Error())
return
}
defer cur.Close(context.TODO())
defer MongoClient.Disconnect(context.TODO())
for cur.Next(context.TODO()) {
var result bson.D
if err := cur.Decode(&result); err != nil {
fmt.Println("cur.Decode异常=" + err.Error())
return
}
fmt.Println("查询结果=", result)
}
updateOne, err := collection.UpdateOne(context.TODO(), bson.D{{"Name", "x1"}}, bson.D{{"$inc", bson.D{{"Age", 1}}}})
if err != nil {
fmt.Println("单个更新失败=" + err.Error())
return
}
fmt.Println("单个更新成功=", updateOne.MatchedCount, updateOne.ModifiedCount)
updateMany, err := collection.UpdateMany(context.TODO(), bson.D{{"Name", "x2"}}, bson.D{{"$set", bson.D{{"Age", uint(31)}}}})
if err != nil {
fmt.Println("批量更新失败=" + err.Error())
return
}
fmt.Println("批量更新成功=", updateMany.MatchedCount, updateMany.ModifiedCount)
deleteOne, err := collection.DeleteOne(context.TODO(), bson.D{{"Name", "x2"}})
if err != nil {
fmt.Println("单条删除失败=" + err.Error())
return
} else {
fmt.Println("单条删除成功=", deleteOne.DeletedCount)
}
deleteMany, err := collection.DeleteMany(context.TODO(), bson.D{{"Name", "x2"}})
if err != nil {
fmt.Println("批量删除失败=" + err.Error())
return
} else {
fmt.Println("批量删除成功=", deleteMany.DeletedCount)
}
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下