私はReactivemongoデータベース(2.6)を初めて使用します。jsonオブジェクト(キーと値のペアであり、UIから[送信]ボタンをクリックした後、データベースに保存するために送信しています)をローカルシステムからアップロード/挿入しようとしています。 Play Framework/Scala を使用して Mongodb に保存します (Play 2.2.3 および 2.3.8 で試しました)。私が試してみました:
import play.api.libs.json.{JsObject, JsValue, OWrites}
import play.api.mvc.{Action, Controller}
import play.modules.reactivemongo.MongoController
import play.modules.reactivemongo.json.collection._
import scala.concurrent.ExecutionContext.Implicits.global
object Application extends Controller with MongoController {
def jsinfocollection: JSONCollection = db.collection[JSONCollection]("mycollection")
implicit val jsvalueWrites = new OWrites[JsValue] {
println("implicit val jsvalueWrites ...")//getting the message on Play console
override def writes(o: JsValue): JsObject = o match {
case o : JsObject => o
case _ => throw new IllegalArgumentException("Only JsObjects can be stored")
}
}
def createJson = Action.async(parse.json) {
println("createJson calling...")//getting the message on Play console
request =>
jsinfocollection.insert(request.body).map{
println("jsinfocollection.insert...")//getting the message on Play console
r => Created(s"JsonInfo is Saved with result $r")
}
}
}
私はMongodbでコレクションを作成しました:>db.createCollection("mycollection")
{ "ok" : 1 }
しかし、私が与えた場合: >db.mycollection.count()
- 0 を与えています。それ以外の場合: db.mycollection.find()
- 何も与えていません。
json データを必要なコレクション ( ) に挿入する方法を教えてください"mycollection"
。前もって感謝します。
コンソールで次を取得しています。
implicit val jsvalueWrites ...
createJson calling...
jsinfocollection.insert...
[error] play - Cannot invoke the action, eventually got an error: java.lang.IllegalArgumentException: Only JsObjects can be stored
Internal server error, for (POST) [/createJson]