go-zero
go-zero copied to clipboard
I use the MongoDB transaction in go-zero as follows,it's useless when rollback,who can answer me?
sess, err := m.conn.StartSession()
if err != nil {
return err
}
defer sess.EndSession(ctx)
err = sess.StartTransaction()
if err != nil {
return err
}
ctx = mongo.NewSessionContext(ctx, sess)
defer func() {
if err != nil {
_ = sess.AbortTransaction(ctx)
}
}()
for _, item := range data {
_, err = m.conn.Collection.InsertOne(ctx, item)
if err != nil {
return err
}
}
_ = sess.CommitTransaction(ctx)
return nil
but as follows,it's useful !!!!!!!!!!!!!!!
sess, err := m.conn.StartSession()
if err != nil {
return err
}
defer sess.EndSession(ctx)
_, err = sess.WithTransaction(ctx, func(sessCtx mongo.SessionContext) (interface{}, error) {
defer func() {
if err != nil {
_ = sessCtx.AbortTransaction(ctx)
}
}()
for _, item := range data {
_, err = m.conn.Collection.InsertOne(sessCtx, item)
if err != nil {
return nil, err
}
}
err = sessCtx.CommitTransaction(sessCtx)
return nil, err
})
if err != nil {
return err
}
Didn't get what's the problem?