Я просто не знаком с изучением Scala и связанных с ним технологий. Я сталкиваюсь с проблемой, когда loadUser должен возвращать запись, но ее пустая.ReactiveMongo query return None
Я получаю следующее сообщение об ошибке: java.util.NoSuchElementException: None.get
Я ценю это не идеальный Scala, так что не стесняйтесь предложить мне улучшения.
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] }
}
}
Благодаря
Это будет требовать подписей функции из будущего [Опция [User]] в будущее [User], который обманув для вызывающего кода, как это может или не может получить пользователь после Будущее завершено. Во всяком случае, изменения, которые вы предложили, все еще вернули None. –
Если возвращается 'Future (Option.empty [T])', это просто означает отсутствие соответствующего документа. – cchantep
MongoDB query db.getCollection ('profile'). Find ({"deviceId": "03af30d0-4dc6-11e6-beb8-9e71128cae77"}) возвращает правильный документ. –