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

时间:2017-02-17 01:38:53

标签: mongodb scala driver

由于“MongoDb Scala Driver”是现在唯一的官方Scala驱动程序,我计划从Casbah切换。但是,MongoDb Scala驱动程序似乎只支持异步API(至少在其文档中)。 有没有办法进行同步查询?

1 个答案:

答案 0 :(得分:6)

我几天前从卡斯巴搬家时遇到了同样的问题。显然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;  
}

显然你可以将结果观察者转换为未来,并像我一样使用Await函数等待它的返回。然后你可以按照自己的意愿操纵结果。

数据库配置如下:

private val mongoClient: MongoClient = MongoClient("mongodb://localhost:27017/?maxPoolSize=30")
private val database: MongoDatabase = mongoClient.getDatabase("mydb");
val Sequence: MongoCollection[Document] = database.getCollection(SEQUENCE);

希望我的回答很有帮助