Я пытаюсь сбрасывать базу данных mongo в объект json, но поскольку мои запросы к базе данных асинхронны, у меня возникают проблемы.Дамп базы данных ReactiveMongo с Play Framework 2.5
Каждая коллекция в моей базе данных содержит данные пользователя, и каждое имя коллекции является именем пользователя.
Итак, когда я хочу получить все данные моих пользователей, я восстанавливаю все имена коллекций, а затем перебираю их, чтобы каждый раз восстанавливать каждую коллекцию.
def databaseDump(prom : Promise[JsObject]) = {
for{
dbUsers <- getUsers
} yield dbUsers
var rebuiltJson = Json.obj()
var array = JsArray()
res.map{ users =>
users.map{ userNames =>
if(userNames.size == 0){
prom failure new Throwable("Empty database")
}
var counter = 0
userNames.foreach { username =>
getUserTables(username).map { tables =>
/* Add data to array*/
...
counter += 1
if(counter == userNames.size){
/*Add data to new json*/
...
prom success rebuiltJson
}
}
}
}
}
Это своего рода работает, но иногда обещание успешно срабатывает, даже если все данные еще не recoverd. Это связано с тем, что моя счетная переменная не является надежным решением.
Есть ли способ обойти всех пользователей, запросить базу данных и ждать, пока все данные будут восстановлены, прежде чем успешно выполнить обещание? Я пытался использовать это для понимания, но не нашел способ сделать это. Есть ли способ сбрасывать всю БД монго в один Json: { username : data, username : data ..}
?
Для такой задачи администрирования db я не думаю, что кодирование чего-то нового с использованием драйвера - это правильный путь. Утилита 'mongodump' может напрямую получать данные как JSON. Помимо этого, я бы предложил вам ознакомиться с документацией, чтобы понять, как [найти документ с помощью ReactiveMongo] (http://reactivemongo.org/releases/0.11/documentation/tutorial/find-documents.html) и что это [сериализация JSON] (http://reactivemongo.org/releases/0.11/documentation/json/overview.html) для. – cchantep
Мне нужно сделать это в scala, потому что я пишу API. Таким образом, данные, которые я восстанавливаю, отправляются другим функциям, которые нужно обработать. Я использую сериализацию JSON, но я не вижу, как использовать его, чтобы сразу получить всю базу данных, а не коллекцию по коллекции. –
«Демпинг» - это «всего лишь» конкретный случай нахождения (всего) документа некоторых документов (вариант использования, опять же, обычно обрабатывается специальными средствами администрирования db). – cchantep