go-zero icon indicating copy to clipboard operation
go-zero copied to clipboard

I use the MongoDB transaction in go-zero as follows,it's useless when rollback,who can answer me?

Open pigfu opened this issue 1 year ago • 1 comments

       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
	}

pigfu avatar Mar 12 '24 02:03 pigfu

Didn't get what's the problem?

kevwan avatar Mar 30 '24 06:03 kevwan