Ok, ich gebe mir selbst die Schuld (und der mystischen Dokumentation des Treibers)
Dieser Treiber ist asynchron, also müssen wir nur warten, bis er fertig ist ... Also, um es zusammenzufassen (gefunden hier ), die in der Dokumentation wirklich verwendet wird, ohne im Treiber selbst zu sein
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())}")
}
Und ändern Sie den Abruf auf diese Weise:
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
}
Es behebt mein Problem.