如何将 fetchNewObject 与 update.one ReactiveMongo 一起使用?

How to use fetchNewObject with update.one ReactiveMongo?

以前我使用 findAndUpdate 并可以添加 fetchNewObject = true 所以我可以在查询后做这样的事情:

.map(_.result[WhicherReport].getOrElse {
  throw new NoSuchElementException
})

但是我现在正在使用事务,只能执行update.one(...)并且没有传递它的选项fetchNewObject,我该怎么办?

这是我的功能:

  def someUpdateFunc(collection: BSONCollection, metadata: Metadata, ids: List[String]): Future[UpdateWriteResult] = {
    collection.update.one(
      q = Json.obj("metadata" -> metadata,
        notLocked(now)),
      u =  Json.obj("$set" -> Json.obj("expenses.$[elem].paired" -> true)),
      upsert = false,
      multi = false,
      arrayFilters = Seq(BSONDocument("elem.id" -> BSONDocument( "$in" -> ids))),
      collation = None)
  }

我想 return 使用 ReactiveMongo class 新的更新案例。

无法将 fetchNewObjectupdate command 一起使用,因为它不是此命令支持的选项。

您似乎认为 findAndModify 不能与事务一起使用,事实并非如此:it can be used with transaction.

for {
  ds <- db.startSession()
  dt <- ds.startTransaction(None)

  coll = dt.collection(colName)
  _ <- coll.findAndUpdate(selector, james, upsert = true)
} yield ...

如果您出于未提及的原因仍想使用 update,那么您将需要在同一事务中执行 find

P.S. .getOrElse { throw new NoSuchElementException } is quite a code smell, which should be discouraged (and rather compose).