mongoデータベースをjsonオブジェクトにダンプしようとしていますが、データベースに対するクエリが非同期であるため、問題が発生しています。ReactiveMongoデータベースフレームをPlay Framework 2.5でダンプする
私のデータベースの各コレクションにはユーザーデータが含まれており、各コレクション名はユーザー名です。
私はすべてのコレクションの名前を回復してから、各コレクションを1つずつ回復するためにそれらの上にループします。
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
}
}
}
}
}
このように動作しますが、すべてのデータがまだ復元されていなくても、約束が正常に開始されることがあります。これは、私のカウンタ変数が信頼できる解決策ではないという事実によるものです。
すべてのユーザーをループし、データベースにクエリを送信し、すべてのデータが回復するのを待ってから、約束をうまく起動させる方法はありますか?私は理解のために使用しようとしましたが、それを行う方法が見つかりませんでした。 1つのJsonに全体のDBをダンプする方法はありますか:{ 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
私はAPIを書いているので、スカラでこれを行う必要があります。したがって、回復したデータは、処理される他の機能に送信されます。私はJSONシリアライゼーションを使用していますが、コレクション全体ではなく、一度にデータベース全体を取得する方法はわかりません。 –
"Dumping"は、いくつかのドキュメントのドキュメントを検索する特定のケースです(ユースケースは通常、専用のDB管理ツールで処理されます)。 – cchantep