我创建了一个mongodb副本集。我能够从mongo shell运行事务。但是,当我尝试使用mongo-go-driver进行操作时,总是会收到此错误(IllegalOperation) Transaction numbers are only allowed on a replica set member or mongos
。我不确定我要去哪里错。我将此用作参考https://github.com/simagix/mongo-go-examples/blob/master/examples/transaction_test.go
。
我这样创建客户端
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017,localhost:27018,localhost:27019?replicaSet=rs"))
我可以连接到各个mongodb实例,而不能连接到副本集。 这是我正在尝试运行的事务
var session mongo.Session
coll := db.Collection("collectionname")
if session, err = client.StartSession(); err != nil {
return "", fmt.Errorf("Could not start session: %q", err)
}
if err = session.StartTransaction(); err != nil {
return "", fmt.Errorf("Could not start Transaction: %q", err)
}
if err = mongo.WithSession(ctx, session, func(sc md.SessionContext) error {
newVal, err = coll.InsertOne(sc, val) // some val that I have
if err != nil {
sc.AbortTransaction(sc)
return fmt.Errorf("Error during New address creation, aborting: %q", err)
}
if err = sc.CommitTransaction(sc); err != nil {
return fmt.Errorf("Error While commiting New address Transaction: %q", err)
}
return nil
}); err != nil {
return "", err
}
session.EndSession(ctx)
有什么我想念的吗?还有其他例子可以参考。感谢您的帮助/建议。