首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB多文档事务,读取非交换数据

MongoDB多文档事务,读取非交换数据
EN

Stack Overflow用户
提问于 2018-11-08 12:50:59
回答 1查看 1.2K关注 0票数 1

MongoDB v4.0之前,多文档事务是通过实现两阶段提交来实现的。在4.0之后,MongoDB为副本集引入了多文档事务;根据它们的文档;“在事务提交之前,事务中的写/更新操作在事务之外是不可见的”。但是,事务范围内数据的可见性又如何呢?为了简单起见,我实现了下面的示例,该示例描述了这种情况。

代码语言:javascript
复制
            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服务器上复制相同的场景,使用相同的逻辑,在事务范围内插入之后查询表,在提交之前返回数据。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-09 21:15:10

正如您所预期的那样,您在代码中缺少的唯一功能是将session作为参数传递给Find方法,尝试:

代码语言:javascript
复制
session.StartTransaction();
ColA.InsertOne(session, BsonDocument.Parse(Obj.ToString()));
var tt = ColA.Find(session, Builders<BsonDocument>.Filter.Empty).ToList();

session.CommitTransaction();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53208132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档