hinzugefügt Lesen http://reactivemongo.org/releases/0.11/documentation/tutorial/consume-streams.html haben diesen CodeRückkehr Dokument, wie sie mit Scala reactivemongo
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import play.api.libs.iteratee._
import reactivemongo.bson.BSONDocument
import reactivemongo.api.collections.bson.BSONCollection
def processPerson1(collection: BSONCollection, query: BSONDocument): Future[Unit] = {
val enumeratorOfPeople: Enumerator[BSONDocument] =
collection.find(query).cursor[BSONDocument].enumerate()
val processDocuments: Iteratee[BSONDocument, Unit] =
Iteratee.foreach { person =>
val lastName = person.getAs[String]("lastName")
val prettyBson = BSONDocument.pretty(person)
println(s"found $lastName: $prettyBson")
}
enumeratorOfPeople.run(processDocuments)
}
Run ist wie folgt definiert: ‚treibt die iteratee die Eingabe des Enumerator zu konsumieren, ein Input.EOF am Ende des Eingangs Hinzufügen . Gibt entweder ein Ergebnis oder eine Ausnahme zurück. von https://www.playframework.com/documentation/2.5.1/api/scala/index.html#play.api.libs.iteratee.Enumerator Bedeutet dies, dass, wenn ein neues Dokument zur Datenbank hinzugefügt wird, die 'processPerson1' erneut aufgerufen werden muss, damit diese Zeile ausgeführt werden kann, damit sie zurückgegeben wird.
Ich möchte nur die Dokumente zurückgeben, wie sie der Datenbank hinzugefügt werden, ohne denselben Code erneut aufzurufen. Mögliche 'nicht sehr gute' Lösung ist es, nur enumeratorOfPeople.run(processDocuments)
in einem geplanten Thread wickeln, aber das Problem des Empfangs aller Dokumente bleibt, möchte ich nur Dokumente, die noch nicht zurückgegeben wurden
Nicht spezifisch für ReactiveMongo. Sie sollten sich kapotierte Sammlungen ansehen. – cchantep
@cchanstep meinst du 'capped collections'? –