我正在使用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)