Как использовать транзакцию с ReactiveMongo?

Я пытаюсь использовать транзакцию с reactivemongodb в playframework. Как я могу это сделать или есть ли документация по playframework?


person John    schedule 25.09.2019    source источник
comment
В игровом фреймворке для этого нет ничего конкретного.   -  person cchantep    schedule 25.09.2019


Ответы (1)


В документации вы можете найти пример использования MongoDB> 4 транзакций.

import scala.concurrent.{ ExecutionContext, Future }

import reactivemongo.bson.BSONDocument

import reactivemongo.api.DefaultDB

def testTx(db: DefaultDB)(implicit ec: ExecutionContext): Future[Unit] = 
  for {
    dbWithSession <- db.startSession()
    dbWithTx <- dbWithSession.startTransaction(None)
    coll = dbWithTx.collection("foo")

    _ <- coll.insert.one(BSONDocument("id" -> 1, "bar" -> "lorem"))
    r <- coll.find(BSONDocument("id" -> 1)).one[BSONDocument] // found

    _ <- db.collection("foo").find(
      BSONDocument("id" -> 1)).one[BSONDocument]
      // not found for DB outside transaction

    _ <- dbWithTx.commitTransaction() // or abortTransaction()
      // session still open, can start another transaction, or other ops

    _ <- dbWithSession.endSession()
  } yield ()
person cchantep    schedule 25.09.2019
comment
Спасибо за вашу помощь. Я использовал это, но не заметил рекомендации по версии. Вот почему это не сработало. Еще раз спасибо. - person John; 25.09.2019