2017-02-17 28 views
1

Поскольку «MongoDb Scala Driver» является единственным официальным драйвером Scala сейчас, я планирую перейти с Casbah. Однако MongoDb Scala Driver, похоже, поддерживает только асинхронный API (по крайней мере, в его документации). Есть ли способ сделать синхронные запросы?Как сделать синхронные запросы с помощью драйвера MongoDb Scala

ответ

4

У меня были те же проблемы несколько дней назад, когда я переезжал из Касбы. По-видимому, официальный драйвер 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); 

Надеюсь, мой ответ был полезным

+0

Спасибо @ israel.zinc. Цените свой подробный ответ. Я понимаю, что мы можем сделать это, используя будущее, но надеялись на более чистую синхронную апи. Угадай, что у нас нет этого больше :( –

 Смежные вопросы

  • Нет связанных вопросов^_^