Как настроить Play!2.5 с ReactiveMongo

Я подключаюсь к MongoDB с помощью Scala, используя:

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! приложение?

1 ответ

Решение

Убедитесь, что у вас есть правильные конфиги в application.conf

play.modules.enabled += "play.modules.reactivemongo.ReactiveMongoModule"
mongodb.uri = "mongodb://localhost:27017/demodb"

Вы должны ввести и изменить код монго, как показано ниже

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-кодом, реактивный MongoApi.database.map возвращает Future[Collection].

Спасибо пари

Другие вопросы по тегам