2016-05-25 18 views
2

ich MongoDB mit Scala verbinden mit:Wie Setup-Wiedergabe 2.5 mit ReactiveMongo

val driver = new MongoDriver 
val connection = driver.connection(List("myhost")) 
val db = connection.database("mydb") 

Dies funktioniert gut, aber wie diese Steuerung mit einem Spiel zu integrieren:

@Singleton 
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi) 
    extends Controller with MongoController with ReactiveMongoComponents { 

Muss ich eine benutzerdefinierte ReactiveMongoApi mit meiner DB-Konfiguration injizieren?

Oder muss ich application.conf mit meinen DB-Einstellungen ändern?

Ich bin mit Spiel 2.5 und http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html bietet diesen Code:

package api 

import reactivemongo.api.{ DB, MongoConnection, MongoDriver } 

trait ReactiveMongoApi { 
    def driver: MongoDriver 
    def connection: MongoConnection 
    def db: DB 
} 

Aber ich bin nicht sicher, wie es mit meiner Play-Anwendung zu integrieren?

Ich denke, ich kenne keine Standardmethode zum Konfigurieren von DB-Quellen mit einem Play! Anwendung?

+0

Wenn Sie das Dokument lesen Sie in der Frage verknüpft haben, können Sie im Abschnitt „Konfigurieren der Datenbankzugriff“ sehen, die Sie '' die mongodb.uri' Einstellung in der hinzufügen angeben müssen application.conf' – cchantep

+1

und add play.modules.enabled + = "play.modules.reactivemongo.ReactiveMongoModule" –

+1

Wenn Sie ein funktionierendes Beispiel von Play 2.5 mit dem neuesten MongoDB-Treiber als Referenz benötigen, dann besuchen Sie https: //www.lightbend .com/activator/template/play-reactive-mongo-db – Nio

Antwort

4

Stellen Sie sicher, korrekten configs in application.conf haben

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

Sie injizieren müssen und Mongo-Code zu ändern, wie unten

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 
} 

Wenn Sie neuen api Code mit altem api Code vergleichen, reactiveMongoApi .database.map gibt Future [Sammlung] zurück.

Dank Pari

+0

Ich verstehe nicht, wie das funktioniert. ReactiveMongoApi, f habe ich gut verstanden, hat keine Eigenschaft namens "database", und wenn ich "db" schreibe, kann ich "map" nicht danach nennen. Sollte ich "reactiveMongoApi" von einem anderen Ort importieren? @Pariksheet_Barapatre Vielen Dank für Ihre Antwort – agusgambina

+0

Dies sind neue APIs, die in Version 0.11 eingeführt werden. Stellen Sie sicher, verwenden Sie "org.reactivemongo" %% "play2-reactivemongo" % "0.11.14", Import-Anweisung wäre - Import play.modules.reactivemongo.ReactiveMongoApi –