私は、scala と reactmongo を使用して Play フレームワーク 2.3 を初めて使用します。フォームからmongodbにデータをロードするためのページをいくつか開発しました。
ここまでは順調ですね。しかし、mongodb では JOINS を直接サポートしていないため、mongodb のネストされたドキュメント機能を使用する予定です。MongoDB でコレクションを結合する手動参照と DB 参照の方法を認識しています。
このフォーラムには、mongodb のネストされたドキュメントに関連する質問がいくつか投稿されていますが、それらは役に立ちません。
Play フレームワーク、scala、reactivemongo を使用して、mongodb コレクション内の既存のドキュメントにサブドキュメントを挿入および更新する方法を教えていただければ幸いです。
データの構造は次のとおりです。
"_id" : ObjectId("5516ae699aaebdfc0bc47f7d"),
"name" : "ABCD",
"address" : "Blue Skies",
"dob" : 135962900000,
"email" : ""
そして、次のように新しいサブドキュメント エントリを追加したいと思います。
"_id" : ObjectId("5516ae699aaebdfc0bc47f7d"),
"name" : "ABCD",
"address" : "Blue Skies",
"dob" : 01/01/1970,
"email" : "",
“visits” : [
{
“date” : 18/02/2015,
“comments” : “Some comments”,
“createdBy” : “XYZ”
},
{
“date” : 23/03/2015,
“comments” : “Some comments”,
“createdBy” : “PQR”
}
]
コレクション内のドキュメントを更新するコードは次のようになります。
def updateData(id: String) = Action.async { implicit request =>
projectForm.bindFromRequest.fold(
formWithErrors => Future.successful(BadRequest(html.editProject(id, formWithErrors))),
project => {
val futureUpdateProj = collection.update(Json.obj("_id" -> Json.obj("$oid" -> id)), project.copy(_id = BSONObjectID(id)))
futureUpdateProj.map { result =>
projectsHome.flashing("success" -> s"Project ${project.name} has been updated")
}.recover {
case t: TimeoutException =>
Logger.error("Problem found in Project update process")
InternalServerError(t.getMessage)
}
})
}