1
由於「MongoDb Scala驅動程序」是現在唯一的官方Scala驅動程序,我計劃從Casbah切換。但是,MongoDb Scala Driver似乎只支持異步API(至少在其文檔中)。 有沒有辦法讓同步查詢?如何使用MongoDb Scala驅動程序進行同步查詢
由於「MongoDb Scala驅動程序」是現在唯一的官方Scala驅動程序,我計劃從Casbah切換。但是,MongoDb Scala Driver似乎只支持異步API(至少在其文檔中)。 有沒有辦法讓同步查詢?如何使用MongoDb Scala驅動程序進行同步查詢
我前幾天從Casbah搬家時遇到同樣的問題。顯然官方的Mongodb驅動程序使用觀察者模式。我想從集合中檢索序列號,並且必須等待檢索值才能繼續操作。我不知道這是正確的做法,但至少這是做這件事的一種方法:
def getSequenceId(seqName: String): Int = {
val query = new BsonDocument("seq_id", new BsonString(seqName))
val resultado = NewMongo.SequenceCollection.findOneAndUpdate(query,inc("nextId",1))
resultado.subscribe(new Observer[Document] {
override def onNext(result: Document): Unit ={}
override def onError(e: Throwable): Unit ={}
override def onComplete(): Unit = {}
})
val awaitedR = Await.result(resultado.toFuture, Duration.Inf).asInstanceOf[List[Document]](0)
val ret = awaitedR.get("nextId").getOrElse(0).asInstanceOf[BsonDouble].intValue();
return ret;
}
顯然,你可以將結果觀察者轉換成未來,等待使用等待功能,像我一樣的回報。然後,您可以根據需要操縱結果。
數據庫配置如下:
private val mongoClient: MongoClient = MongoClient("mongodb://localhost:27017/?maxPoolSize=30")
private val database: MongoDatabase = mongoClient.getDatabase("mydb");
val Sequence: MongoCollection[Document] = database.getCollection(SEQUENCE);
希望我的回答對您有所幫助
感謝@ israel.zinc。感謝您的詳細回覆。我明白我們可以通過使用未來,但希望有一個更清潔的同步api。猜猜我們不會再有了: –