Не удалось выполнить 2 запроса findAndUpdate внутри транзакции MongoDB 4.0 - PullRequest
0 голосов
/ 10 июля 2020

У меня есть два запроса, которые я хочу выполнить внутри транзакции, каждый по отдельности работает, но при попытке их обоих вместе я получаю эту странную ошибку:

  "errmsg": "Only servers in a sharded cluster can start a new transaction at the active transaction number"

Я понял, что вы не можете начать с findAndUpdate, если у вас более 1 запроса в транзакции ...

Это то, что я пытаюсь запустить:

  def testFunc(metadata: Metadata)(implicit ec: ExecutionContext) = for {
    dbWithSession <- collection.db.startSession()
    dbWithTx <- dbWithSession.startTransaction(None)
    coll = dbWithTx.collection[BSONCollection](collection.name)

    _ <- queryOne(coll, metadata)
    _ <- queryTwo(coll, metadata)

    _ <- dbWithTx.commitTransaction()

    _ <- dbWithSession.endSession()
  } yield Unit

Оба они - запросы поиска и обновления , первый выглядит так:

  def queryOne(collection: BSONCollection, metadata: Metadata) = {
    collection.findAndUpdate(
      selector = BSONDocument(s"metadata" -> metadata),
      update = BSONDocument("$set" -> BSONDocument("expenses.$[elem].paired" -> true)),
      fetchNewObject = true, upsert = false, sort = None, fields = None, bypassDocumentValidation = false, writeConcern = WriteConcern.Acknowledged, maxTime = None, collation = None,
      arrayFilters = Seq(BSONDocument("elem.id" -> BSONDocument("$in" -> List("1","2"))))
    )
  }

Кто-нибудь понимает, почему я могу получить эту ошибку ...?

Самое странное то, что они работают отдельно, если я закомментирую одну из у них нет проблем.

используя:

...