如何使用MongoDb Scala驱动程序进行同步查询
由于“MongoDb Scala驱动程序”是目前唯一的官方Scala驱动程序,我计划从Casbah转用。然而,MongoDb Scala驱动程序似乎只支持异步API(至少在其文档中是这样)。如何使用MongoDb Scala驱动程序进行同步查询,mongodb,scala,driver,Mongodb,Scala,Driver,由于“MongoDb Scala驱动程序”是目前唯一的官方Scala驱动程序,我计划从Casbah转用。然而,MongoDb Scala驱动程序似乎只支持异步API(至少在其文档中是这样)。 有什么方法可以进行同步查询吗?几天前我从卡斯巴搬家时也遇到了同样的问题。显然,官方的Mongodb驱动程序使用观察者模式。我想从集合中检索序列号,必须等待检索到的值才能继续操作。我不确定这是否正确,但至少这是一种方法: def getSequenceId(seqName: String): Int = {
有什么方法可以进行同步查询吗?几天前我从卡斯巴搬家时也遇到了同样的问题。显然,官方的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;
}
显然,您可以像我一样使用wait函数将结果观察器转换为future并等待其返回。然后,您可以根据需要操纵结果
数据库配置如下所示:
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.zing。感谢您的详细回复。我知道我们可以通过使用future来实现这一点,但希望有一个更干净的同步api。我想我们没有;我再也没有了:(