2016-05-25 4 views
2

подключиться к MongoDB с Scala использованием:Как установить Play 2.5 с ReactiveMongo

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 с настройками моего БД?

Я использую игру 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! заявление ?

+0

Если вы читали документ вы связаны в этом вопросе, вы можете увидеть в разделе «Настройка доступа к базе данных», которые указывают вам нужно добавить 'параметр mongodb.uri' в' application.conf' – cchantep

+1

и добавьте play.modules.enabled + = "play.modules.reactivemongo.ReactiveMongoModule" –

+1

Если вам нужен рабочий пример Play 2.5 с последним драйвером MongoDB в качестве ссылки, то посмотрите https: //www.lightbend .com/activator/template/play-reactive-mongo-db – Nio

ответ

4

Убедитесь, что вы правильно конфиги в 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, reactiveMongoApi .database.map возвращает Future [Collection].

Благодаря Pari

+0

Я не понимаю, как это работает. ReactiveMongoApi, я хорошо понял, не имеет свойства с именем «database», и если я пишу «db», я не могу назвать «карту» после. Должен ли я импортировать «reactiveMongoApi» из другого места? @Pariksheet_Barapatre благодарит вас за ваш ответ – agusgambina

+0

Это новые API, которые представлены в версии 0.11. Убедитесь, вы используете "org.reactivemongo" %% "play2-reactivemongo" % "0.11.14", заявления импорта будет - импорта play.modules.reactivemongo.ReactiveMongoApi –

Смежные вопросы