如何从FindAndModifyResult获得结果?

时间:2017-09-16 16:50:55

标签: scala playframework play-reactivemongo

我正在使用Play Framework 2.5和play2-reactivemongo v0.12.4。 尝试使用findAndUpdate创建自动增量计数器。 (我尝试使用findAndModify。但是,我不知道如何创建一个参数“commands.JSONFindAndModifyCommand.Modify”)

现在我不知道如何从FindAndModifyResult获得结果。 我也试过“结果[柜台]”。但是,结果似乎不存在..

BaseDAO.scala

class BaseDAO[T] {
  ...
  val collectionName: String
  lazy val collection: Future[JSONCollection] = 
    reactiveMongoApi.database.map(_.collection(collectionName))

  ...
}

CounterDAO.scala

    import play.modules.reactivemongo.json.ImplicitBSONHandlers._
    import play.modules.reactivemongo.ReactiveMongoApi
    import play.api.libs.json._
    import play.api.libs.concurrent.Execution.Implicits._

    trait CounterDAO extends BaseDAO[Counter]

    class CounterDAOImpl @Inject() (val reactiveMongoApi: ReactiveMongoApi)
    extends CounterDAO {
      val collectionName = "counter"

      def incrementCounter(query: JsObject = Json.obj())(implicit writer: OWrites[Counter]): Future[Option[Long]] = {
        // !!        
        collection.map(_.findAndUpdate(query, DBQueryBuilder.inc("seq", 1), fetchNewObject = true)).map(_.value.get)
      }
    }

DBQueryBuilder.scala

object DBQueryBuilder {
  def inc(field: String, amount: Int): JsObject = Json.obj("$inc" -> Json.obj(field -> amount))
}

Counter.scala

case class Counter(
  var _id: Option[BSONObjectID] = None,
  seq: Long
)

[error] shared/src/main/scala/com/xxx/models/daos/CounterDAO.scala:29: type mismatch;
[error]  found   : scala.util.Try[x$3.BatchCommands.FindAndModifyCommand.FindAndModifyResult]
[error]  required: Option[Long]
[error]     collection.map(_.findAndUpdate(query, DBQueryBuilder.inc("seq", 1), fetchNewObject = true)).map(_.value.get)

0 个答案:

没有答案