Mongodb 如何设置播放!2.5使用ReactiveMongo
我使用Scala连接到MongoDB,使用:Mongodb 如何设置播放!2.5使用ReactiveMongo,mongodb,scala,playframework,reactivemongo,Mongodb,Scala,Playframework,Reactivemongo,我使用Scala连接到MongoDB,使用: val driver = new MongoDriver val connection = driver.connection(List("myhost")) val db = connection.database("mydb") 这很好,但如何将其与播放控制器集成: @Singleton class ReactiveController @Inject() (implicit system: ActorSystem, materializer:
val driver = new MongoDriver
val connection = driver.connection(List("myhost"))
val db = connection.database("mydb")
这很好,但如何将其与播放控制器集成:
@Singleton
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents {
我是否需要在我的DB配置中注入自定义的ReactiveMongoApi
或者我需要用我的DB设置修改application.conf吗
我正在使用play 2.5并提供以下代码:
package api
import reactivemongo.api.{ DB, MongoConnection, MongoDriver }
trait ReactiveMongoApi {
def driver: MongoDriver
def connection: MongoConnection
def db: DB
}
但我不确定如何将其与我的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
}
class MongoUserDao@Inject()(val reactiveMongoApi:reactiveMongoApi)
扩展UserDao{
//val users=reactiveMongoApi.db.collection[JSONCollection](“users”)--旧API
//def find(userId:UUID):未来[选项[用户]]=
//users.find(Json.obj(“id”->userId)).one[User]--旧代码
def usersF=reactiveMongoApi.database.map(u.collection[JSONCollection](“users”)//新API
def find(userId:UUID):Future[Option[User]]=for{
用户如果您阅读了问题中链接的文档,您可以看到“配置数据库访问”部分,这表明您需要在application.conf
中添加mongodb.uri
设置,并添加play.modules.enabled+=“play.modules.reactivemongo.ReactiveMongoModule”如果您想要一个Play 2.5的工作示例,并使用最新的MongoDB驱动程序作为参考,那么请查看我不了解它是如何工作的。如果我理解得很好,ReactiveMongoApi没有名为“database”的属性,并且如果我写“db”,我就不能在后面调用“map”。我应该导入“ReactiveMongoApi”吗从另一个地方?@Pariksheet\u Barapatre感谢您的回答这些是在0.11版本中引入的新API。请确保使用“org.reactivemongo”%%“play2 reactivemongo”%%“0.11.14”,导入语句将是-import play.modules.reactivemongo.ReactiveMongoApi