golang_mongdb 事务
这里还没有开始弄 :/Users/mac/工作/goland/github/mongo-go-examples
func TestTransactionCommit(t *testing.T) { var err error var client *mongo.Client var collection *mongo.Collection var ctx = context.Background() var id = primitive.NewObjectID() var doc = bson.M{"_id": id, "hometown": "Atlanta", "year": int32(1998)} var result *mongo.UpdateResult var session mongo.Session var update = bson.D{{Key: "$set", Value: bson.D{{Key: "year", Value: int32(2000)}}}} if client, err = getMongoClient(); err != nil { t.Fatal(err) } defer client.Disconnect(ctx) collection = client.Database(dbName).Collection(collectionExamples) if _, err = collection.InsertOne(ctx, doc); err != nil { t.Fatal(err) } if session, err = client.StartSession(); err != nil { t.Fatal(err) } if err = session.StartTransaction(); err != nil { t.Fatal(err) } if err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error { if result, err = collection.UpdateOne(sc, bson.M{"_id": id}, update); err != nil { t.Fatal(err) } if result.MatchedCount != 1 || result.ModifiedCount != 1 { t.Fatal("replace failed, expected 1 but got", result.MatchedCount) } if err = session.CommitTransaction(sc); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } session.EndSession(ctx) var v bson.M if err = collection.FindOne(ctx, bson.D{{Key: "_id", Value: id}}).Decode(&v); err != nil { t.Fatal(err) } if v["year"] != int32(2000) { t.Log(v) t.Fatal("expected 2000 but got", v["year"]) } res, _ := collection.DeleteOne(ctx, bson.M{"_id": id}) if res.DeletedCount != 1 { t.Fatal("delete failed, expected 1 but got", res.DeletedCount) } } func TestTransactionAbort(t *testing.T) { var err error var client *mongo.Client var collection *mongo.Collection var ctx = context.Background() var id = primitive.NewObjectID() var doc = bson.M{"_id": id, "hometown": "Atlanta", "year": int32(1998)} var result *mongo.UpdateResult var session mongo.Session var update = bson.D{{Key: "$set", Value: bson.D{{Key: "year", Value: int32(2000)}}}} if client, err = getMongoClient(); err != nil { t.Fatal(err) } defer client.Disconnect(ctx) collection = client.Database(dbName).Collection(collectionExamples) if _, err = collection.InsertOne(ctx, doc); err != nil { t.Fatal(err) } if session, err = client.StartSession(); err != nil { t.Fatal(err) } if err = session.StartTransaction(); err != nil { t.Fatal(err) } if err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error { if result, err = collection.UpdateOne(sc, bson.M{"_id": id}, update); err != nil { t.Fatal(err) } if result.MatchedCount != 1 || result.ModifiedCount != 1 { t.Fatal("replace failed, expected 1 but got", result.MatchedCount) } if err = session.AbortTransaction(sc); err != nil { t.Fatal(err) } return nil }); err != nil { t.Fatal(err) } session.EndSession(ctx) var v bson.M if err = collection.FindOne(ctx, bson.D{{Key: "_id", Value: id}}).Decode(&v); err != nil { t.Fatal(err) } if v["year"] != int32(1998) { t.Log(v) t.Fatal("expected 1998 but got", v["year"]) } res, _ := collection.DeleteOne(ctx, bson.M{"_id": id}) if res.DeletedCount != 1 { t.Fatal("delete failed, expected 1 but got", res.DeletedCount) } }
分类:
golang-mongodb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!