До MongoDB v4.0
многодокументные транзакции выполнялись путем реализации двухфазной фиксации.
После 4.0
MongoDB ввел многодокументные транзакции для наборов реплик; Согласно их документации; «пока транзакция не зафиксирована, никакие операции записи / обновления в транзакции не видны вне транзакции».
Но как насчет видимости данных в рамках транзакции?
Для простоты я реализовал приведенный ниже пример, который изображает случай.
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 с использованием той же логики, запрос таблицы после вставки в область транзакции возвращает данные перед фиксацией.
Любая помощь приветствуется.