Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 是否可以运行事务mon local mongod v4.2.8_Mongodb_Go_Transactions - Fatal编程技术网

Mongodb 是否可以运行事务mon local mongod v4.2.8

Mongodb 是否可以运行事务mon local mongod v4.2.8,mongodb,go,transactions,Mongodb,Go,Transactions,尝试在删除(Go)时运行事务时: 我得到以下信息(仅在本地,即使在更新之后(通过mongod-version验证版本)): 错误: 代码:未知 消息:(非法操作)事务号仅允许在副本集成员或mongos上使用 它在Atlas上起作用,所以它只是一个与当地相关的问题 所以我的问题是: 是否可以运行事务mon local mongod v4.2.8 谢谢您需要运行副本集,但出于开发目的,您可以运行单节点副本集。您好!谢谢,但是你是如何做到这一点的呢?如果withTransaction api是由g

尝试在删除(Go)时运行事务时:

我得到以下信息(仅在本地,即使在更新之后(通过mongod-version验证版本)):

错误: 代码:未知 消息:(非法操作)事务号仅允许在副本集成员或mongos上使用

  • 它在Atlas上起作用,所以它只是一个与当地相关的问题
所以我的问题是:

是否可以运行事务mon local mongod v4.2.8


谢谢

您需要运行副本集,但出于开发目的,您可以运行单节点副本集。您好!谢谢,但是你是如何做到这一点的呢?如果withTransaction api是由go驱动程序实现的,那么你也应该使用它。您可以按照说明创建副本集,但仅配置一个节点,而不是3个。您需要运行副本集,但出于开发目的,可以运行单个节点副本集。您好!谢谢,但是你是如何做到这一点的呢?如果withTransaction api是由go驱动程序实现的,那么你也应该使用它。您可以按照说明创建副本集,但只配置一个节点,而不是3个节点。
func (dal *DAL) GetAndRemoveOneCode() (string, error) {

    var session mongo.Session
    var err error
    var ctx = context.Background()
    var result *mongo.DeleteResult
    var codeContainer models.CodeContainer
    var cursor *mongo.Cursor

    for result == nil || result.DeletedCount != 1 {
        var batchSize int32 = 1
        pipeline := mongo.Pipeline{bson.D{{Key: "$sample", Value: bson.D{{Key: "size", Value: 1}}}}}
        cursor, err = dal.mongodb.GetDatabase().Collection(collectionName).Aggregate(ctx, pipeline, &options.AggregateOptions{BatchSize: &batchSize})
        if err != nil {
            return "", err
        }

        for cursor.Next(ctx) {
            // decode the document
            if err := cursor.Decode(&codeContainer); err != nil {
                return "", err
            }
        }

        if session, err = dal.mongodb.GetDatabase().Client().StartSession(); err != nil {
            return "", err
        }
        if err = session.StartTransaction(); err != nil {
            return "", err
        }
        if err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error {
            if result, err = dal.mongodb.GetDatabase().Collection(collectionName).DeleteOne(sc, bson.D{{Key: "_id", Value: codeContainer.ID}}); err != nil {
                return err
            }
            if result.DeletedCount != 1 {
                return err
            }

            if err = session.CommitTransaction(sc); err != nil {
                return err
            }
            return nil
        }); err != nil {
            return "", err
        }
        session.EndSession(ctx)
    }

    return codeContainer.Code, nil
}