2016-09-08 3 views
1

durchführen Hier ist mein Code-Snippet, wenn ich nicht erwarte oder Thread, ich werde leeres Dokument erhalten. Es ist spannend, bevor man die Daten von mongodb bekommt. Ich möchte diesen Prozess synchron in Scala ausführen, ohne Await und Thread-Ansatz zu verwenden.Ich möchte Suche auf mongodb mit scala Treiber

+0

Welchen Mongo-Client verwenden Sie? – Abhi

+0

Sie könnten 'toFuture' auf dem' Observable' aufrufen, das Sie von der Abfrage erhalten, und dann die Musterübereinstimmung für den Wert ermitteln. – sebszyller

+0

Sie können einen Blick auf http://reactivemongo.org/releases/0.11/documentation/tutorial/find-documents.html werfen – cchantep

Antwort

0

Verwenden Sie keine Var, um den Wert von Observable zu erhalten. Ihr Programm stoppt, bevor das Future abgeschlossen ist und die veränderbare Variable hat keinen Wert von Mongo. Verändere die beobachtbare Future

val r = collectionName.find(query).projection(projection).toFuture 

Wenn Sie diesen Wert wollen, bevor Ihr Programm Ihren Thread beendet mit Await.result (r, 10 Sekunden) warten müssen. In Ihrem Fall haben Sie Ihren Code in einer Funktion, die in einem Thread ausgeführt wird und der "previousDoc = data" blockiert es nicht, so dass es einfach zurückkehrt. Ändern Sie den Rückgabetyp Zukunft [Seq [Dokument]]:

def find(query: Document, projection: Document, collectionName : MongoCollection[Document]) : Future[Seq[Document]] = { 
collectionName.find(query).projection(projection).toFuture()      
} 

Scala Mongo Der Treiber arbeitet in einem asynchronen Art und Weise unter Verwendung von Observablen oder Futures. Also versuche auf diese Weise zu arbeiten.