MongoDB 多文档事务,读取未提交的数据

MongoDB multi document transaction, reading non commited data

MongoDB v4.0 之前,多文档事务是通过实施两阶段提交实现的。 在4.0、MongoDB之后引入了副本集的多文档事务;根据他们的文档; "until a transaction is committed, no write/update operations in the transaction are visible outside the transaction"。 但是数据在事务范围内的可见性呢? 为了简单起见,我已经实现了下面的例子,描述了这个案例。

            var client = new MongoClient("mongodb://localhost");
            var session = client.StartSession();
            var ColA = session.Client.GetDatabase("Testing").GetCollection<BsonDocument>("ColA");
            JObject Obj = new JObject();
            Obj.Add("A", "ValA");
            session.StartTransaction();
            ColA.InsertOne(session, BsonDocument.Parse(Obj.ToString()));
            var tt = ColA.Find(new BsonDocument { }).ToList();
            session.CommitTransaction();

在源头,"ColA"是一个空集合,当我插入文档然后尝试查询它(tt = ColA.Find...)时,结果集仍然是空的。 我理解在事务作用域之外,结果集在提交之前应该保持为空,但是为什么在作用域之内它是空的。

通过在 SQL 服务器上重现相同的场景,使用相同的逻辑,在事务范围内插入后查询 table,提交前 returns 数据。

感谢任何帮助。

它按您预期的那样工作,您的代码中唯一缺少的是 session 作为参数传递给 Find 方法,试试:

session.StartTransaction();
ColA.InsertOne(session, BsonDocument.Parse(Obj.ToString()));
var tt = ColA.Find(session, Builders<BsonDocument>.Filter.Empty).ToList();

session.CommitTransaction();