如何使用MongoDb Scala驱动程序进行同步查询

如何使用MongoDb Scala驱动程序进行同步查询,mongodb,scala,driver,Mongodb,Scala,Driver,由于“MongoDb Scala驱动程序”是目前唯一的官方Scala驱动程序,我计划从Casbah转用。然而,MongoDb Scala驱动程序似乎只支持异步API(至少在其文档中是这样)。 有什么方法可以进行同步查询吗?几天前我从卡斯巴搬家时也遇到了同样的问题。显然,官方的Mongodb驱动程序使用观察者模式。我想从集合中检索序列号,必须等待检索到的值才能继续操作。我不确定这是否正确,但至少这是一种方法: def getSequenceId(seqName: String): Int = {

由于“MongoDb Scala驱动程序”是目前唯一的官方Scala驱动程序,我计划从Casbah转用。然而,MongoDb Scala驱动程序似乎只支持异步API(至少在其文档中是这样)。
有什么方法可以进行同步查询吗?

几天前我从卡斯巴搬家时也遇到了同样的问题。显然,官方的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。我想我们没有;我再也没有了:(