如何使用 ReactiveMongo 设置 Play!2.5
How to setup Play!2.5 with ReactiveMongo
我使用 Scala 连接到 MongoDB 使用:
val driver = new MongoDriver
val connection = driver.connection(List("myhost"))
val db = connection.database("mydb")
这很好用,但是如何将它与 Play 控制器集成:
@Singleton
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents {
我需要在我的数据库配置中注入自定义 ReactiveMongoApi
吗?
或者我需要用我的数据库设置修改 application.conf 吗?
我正在使用 play 2.5,http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html 提供了以下代码:
package api
import reactivemongo.api.{ DB, MongoConnection, MongoDriver }
trait ReactiveMongoApi {
def driver: MongoDriver
def connection: MongoConnection
def db: DB
}
但我不确定如何将它与我的 Play 应用程序集成?
我想我不知道使用 Play 配置数据库源的一些标准方法!申请 ?
确保您在 application.conf
中的配置正确
play.modules.enabled += "play.modules.reactivemongo.ReactiveMongoModule"
mongodb.uri = "mongodb://localhost:27017/demodb"
您需要注入并更改 mongo 代码如下
class MongoUserDao @Inject() (val reactiveMongoApi: ReactiveMongoApi)
extends UserDao {
// val users = reactiveMongoApi.db.collection[JSONCollection]("users") -- old API
// def find(userId:UUID):Future[Option[User]] =
// users.find(Json.obj("id" -> userId)).one[User] -- old code
def usersF = reactiveMongoApi.database.map(_.collection[JSONCollection]("users")) //new API
def find(userId:UUID):Future[Option[User]] = for {
users <- usersF
user <- users.find(Json.obj("id" -> userId)).one[User]
} yield user // new code
}
如果将新 api 代码与旧 api 代码进行比较,reactiveMongoApi.database.map returns Future[Collection].
我使用 Scala 连接到 MongoDB 使用:
val driver = new MongoDriver
val connection = driver.connection(List("myhost"))
val db = connection.database("mydb")
这很好用,但是如何将它与 Play 控制器集成:
@Singleton
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents {
我需要在我的数据库配置中注入自定义 ReactiveMongoApi
吗?
或者我需要用我的数据库设置修改 application.conf 吗?
我正在使用 play 2.5,http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html 提供了以下代码:
package api
import reactivemongo.api.{ DB, MongoConnection, MongoDriver }
trait ReactiveMongoApi {
def driver: MongoDriver
def connection: MongoConnection
def db: DB
}
但我不确定如何将它与我的 Play 应用程序集成?
我想我不知道使用 Play 配置数据库源的一些标准方法!申请 ?
确保您在 application.conf
中的配置正确play.modules.enabled += "play.modules.reactivemongo.ReactiveMongoModule"
mongodb.uri = "mongodb://localhost:27017/demodb"
您需要注入并更改 mongo 代码如下
class MongoUserDao @Inject() (val reactiveMongoApi: ReactiveMongoApi)
extends UserDao {
// val users = reactiveMongoApi.db.collection[JSONCollection]("users") -- old API
// def find(userId:UUID):Future[Option[User]] =
// users.find(Json.obj("id" -> userId)).one[User] -- old code
def usersF = reactiveMongoApi.database.map(_.collection[JSONCollection]("users")) //new API
def find(userId:UUID):Future[Option[User]] = for {
users <- usersF
user <- users.find(Json.obj("id" -> userId)).one[User]
} yield user // new code
}
如果将新 api 代码与旧 api 代码进行比较,reactiveMongoApi.database.map returns Future[Collection].