Ich bin gerade neu zu lernen, Scala und die damit verbundenen Technologien. Ich bin auf das Problem, wo der LoadUser einen Datensatz zurückgeben sollte, aber es kommt leer.ReactiveMongo Abfrage zurück keine
Ich erhalte die folgende Fehlermeldung: java.util.NoSuchElementException: None.get
Ich schätze diese Scala ist nicht ideal, so können Sie mich Verbesserungen vorzuschlagen.
class MongoDataAccess extends Actor {
val message = "Hello message"
override def receive: Receive = {
case data: Payload => {
val user: Future[Option[User]] = MongoDataAccess.loadUser(data.deviceId)
val twillioApiAccess = context.actorOf(Props[TwillioApiAccess], "TwillioApiAccess")
user onComplete {
case Failure(exception) => println(exception)
case p: Try[Option[User]] => p match {
case Failure(exception) => println(exception)
case u: Try[Option[User]] => twillioApiAccess ! Action(data, u.get.get.phoneNumber, message)
}
}
}
case _ => println("received unknown message")
}
}
object MongoDataAccess extends MongoDataApi {
def connect(): Future[DefaultDB] = {
// gets an instance of the driver
val driver = new MongoDriver
val connection = driver.connection(List("192.168.99.100:32768"))
// Gets a reference to the database "sensor"
connection.database("sensor")
}
def props = Props(new MongoDataAccess)
def loadUser(deviceId: UUID): Future[Option[User]] = {
println(s"Loading user from the database with device id: $deviceId")
val query = BSONDocument("deviceId" -> deviceId.toString)
// By default, you get a Future[BSONCollection].
val collection: Future[BSONCollection] = connect().map(_.collection("profile"))
collection flatMap { x => x.find(query).one[User] }
}
}
Dank
, dass die Signatur der Funktion von Future [Option [Benutzer]] in der Zukunft [Benutzer], die für den anrufenden Code täuschen, wie könnte es geht zu verlangen oder einen Benutzer nicht einmal das bekommen könnte Die Zukunft ist abgeschlossen. Wie auch immer, Änderungen, die Sie vorgeschlagen haben, kehrten immer noch zurück. –
Wenn ein 'Future (Option.empty [T])' zurückgegeben wird, bedeutet dies einfach, dass kein übereinstimmendes Dokument vorhanden ist. – cchantep
MongoDB-Abfrage db.getCollection ('Profil'). Find ({"deviceId": "03af30d0-4dc6-11e6-beb8-9e71128cae77"}) gibt das richtige Dokument zurück. –