Ok donc, je m'en veux (et la documentation mystique du pilote)
Ce pilote est asynchrone, nous n'avons donc qu'à attendre qu'il se termine... Donc, pour résumer en utilisant cela (trouvé ici ) qui est réellement utilisé dans la documentation sans être dans le pilote lui-même
implicit class DocumentObservable[C](val observable: Observable[Document]) extends ImplicitObservable[Document] {
override val converter: (Document) => String = (doc) => doc.toJson
}
implicit class GenericObservable[C](val observable: Observable[C]) extends ImplicitObservable[C] {
override val converter: (C) => String = (doc) => doc.toString
}
trait ImplicitObservable[C] {
val observable: Observable[C]
val converter: (C) => String
def results(): Seq[C] = Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
def headResult() = Await.result(observable.head(), Duration(10, TimeUnit.SECONDS))
def printResults(initial: String = ""): Unit = {
if (initial.length > 0) print(initial)
results().foreach(res => println(converter(res)))
}
def printHeadResult(initial: String = ""): Unit = println(s"${initial}${converter(headResult())}")
}
Et changer récupérer de cette façon :
def retrieveDocument(id: Int, collectionName: String, databaseName: String, url: String): Option[Document] = {
var res: Option[Document] = None
getMongoCollectionImmutable(collectionName, databaseName, url)
.find(Filters.equal("_id", id))
.limit(1).results().foreach({ x => res = Some(x) })
res
}
Cela résout mon problème.