У меня есть два запроса, которые я хочу выполнить внутри транзакции, каждый по отдельности работает, но при попытке их обоих вместе я получаю эту странную ошибку:
"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"))))
)
}
Кто-нибудь понимает, почему я могу получить эту ошибку ...?
Самое странное то, что они работают отдельно, если я закомментирую одну из у них нет проблем.
используя:
- Scala 2,12
- MongoDB 4.0
- ReactiveMon go 0,18 .8-play27
- Playframework 2.7