Mongodb 简单操作备忘录及Golang操作mongodb的笔记

时间:2025-03-08 07:52:26
package main import ( "context" "fmt" "time" "/mongo-driver/bson" "/mongo-driver/mongo" "/mongo-driver/mongo/options" ) func main() { /* 文档 Document 数组 Array */ ctx, cancel := context.WithTimeout(context.Background(), time.Second*60) defer cancel() // 设置客户端连接配置 clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") // 连接到MongoDB client, err := mongo.Connect(ctx, clientOptions) if err != nil { fmt.Println(err) } defer func() { if err := client.Disconnect(ctx); err != nil { panic(err) } }() // 检查连接 err = client.Ping(context.TODO(), nil) if err != nil { fmt.Println(err) } fmt.Println("Connected to MongoDB!") coll := client.Database("gin").Collection("gin") // 增 // 新增一条 注意在{} 中的语法 一个字段要写在一个{}中,前面是字段后面是值 rst, err := coll.InsertOne(ctx, bson.D{{"name", "ss"}, {"age", 20}}) if err != nil { fmt.Println(err) } fmt.Println(rst.InsertedID) /* 相当于shell客户端中的 ({name:"ss",age:20}) */ // 新增多条 type Student struct { Name string Age uint8 } // 结构体的方式 // 类型必须是 []interface{} stus := []interface{}{Student{Name: "stu1", Age: 10}, Student{Name: "stu2", Age: 11}, Student{Name: "stu3", Age: 12}} rst2, err := coll.InsertMany(ctx, stus) if err != nil { fmt.Println(err) panic("插入多条数据失败") } fmt.Println(rst2.InsertedIDs...) /* 相当于 ([{name:"stu1", age: 10}, {name:"stu2", age:20}]) */ // bson的方式 stus1 := []interface{}{bson.D{{"name", "bson001"}, {"age", 30}}, bson.D{{"name", "bson0002"}, {"age", 32}}} rst3, err := coll.InsertMany(ctx, stus1) if err != nil { fmt.Println(err) panic("bson的方式插入多条数据失败") } fmt.Println(rst3.InsertedIDs) // 查 // 完全匹配 查一条 var s1 Student if err := coll.FindOne(ctx, bson.D{{"name", "bson001"}}).Decode(&s1); err != nil { fmt.Println(err) } fmt.Printf("name--%v,age--%v\n", s1.Name, s1.Age) // 查多条 >= 需要嵌套 ({age:{$gt:10}}) cur1, err := coll.Find(ctx, bson.D{{"age", bson.D{{"$gt", 10}}}}) if err != nil { fmt.Println(err) } // 结果是一个游标 需要遍历然后单条解析 var stus0 = make([]Student, 0) for cur1.Next(ctx) { s := Student{} cur1.Decode(&s) // (, ) stus0 = append(stus0, s) } fmt.Println(stus0) // 改 // 改一条 uprst, err := coll.UpdateOne(ctx, bson.D{{"name", "bson001"}}, bson.D{{"$inc", bson.D{{"age", 2}}}}) if err != nil { fmt.Println(err) } fmt.Println(uprst.MatchedCount, uprst.UpsertedCount, uprst.UpsertedID) // 改多条 uprst2, err := coll.UpdateMany(ctx, bson.D{{"name", "bson0002"}}, bson.D{{"$set", bson.D{{"age", 100}}}}) if err != nil { fmt.Println(err) } fmt.Println(uprst2.MatchedCount, uprst2.ModifiedCount) /* 修改时 修改的对象必须是 $开头的 $set 直接设置 $inc 在原有的基础上增加 $ */ // 删 // 删一条 rst11, err := coll.DeleteOne(ctx, bson.D{{"name", "stu1"}}) if err != nil { fmt.Println(err) } /* 相当于 ({name:"stu1"}) */ fmt.Println(rst11.DeletedCount) // 删多条 rst12, err := coll.DeleteMany(ctx, bson.D{{"name", "stu1"}}) if err != nil { fmt.Println(err) } fmt.Println(rst12.DeletedCount) /* 相当于 ({name:"stu1"}) */ // 删除全部 rst13, err := coll.DeleteMany(ctx, bson.D{}) if err != nil { fmt.Println(err) } fmt.Println(rst13.DeletedCount) }