我是新來的Reactivemongo數據庫(2.6),因爲我試圖上傳/插入json對象(這是鍵/值對,我發送它存儲在數據庫中,點擊我的用戶界面中的提交按鈕)從我的使用Play Framework/Scala在Mongodb中存儲localsystem(使用Play 2.2.3和2.3.8進行試用)。我曾嘗試:無法調用動作,最終出現錯誤:java.lang.IllegalArgumentException:只有JsObjects可以存儲在Play框架中嗎?
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]
您正在使用Play和ReactiveMongo的老版本。 – cchantep
@cchantep,當我使用Play(2.2.3)和Mongo(2.6)時,我是否可以知道它的任何解決方案。 – Dhana
我懷疑你會得到許多社區支持與棄用版本 – cchantep