如何获取我插入的所有数据?

时间:2016-10-17 06:37:44

标签: json scala reactivemongo

我使用json和reactiveMongo制作了一个小应用程序 学生信息。

object Applications extends Controller{

  val studentDao = StudentDaoAndEntity
  val studentqueryReader: Reads[JsObject] = implicitly[Reads[JsObject]]

  def saveStudent = Action.async(parse.json) { request =>
    request.body.validate[StudentInfo].map {
      k => studentDao.insertStudent(k).map {
        l => Ok("Successfully inserted")
      }
    }.getOrElse(Future.successful(BadRequest("Invalid Json"))

数据库

object StudentDaoAndEntity {

  val sreader: Reads[StudentInfo] = Json.reads[StudentInfo]
  val swriter: Writes[StudentInfo] = Json.writes[StudentInfo]
  val studentqueryReader: Reads[JsObject] = implicitly[Reads[JsObject]]

  def db = ReactiveMongoPlugin.db
  def collection: JSONCollection = db[JSONCollection]("student")
  def insertStudent(student: StudentInfo): Future[JsObject]= {   
    val modelToJsObj = swriter.writes(student).as[JsObject]
    collection.insert(modelToJsObj) map (_ => modelToJsObj)
  }

这很好用。现在我需要获取我插入的所有数据。我怎么能够    去做?我不是要求代码而是要求Idea。

2 个答案:

答案 0 :(得分:0)

首先:您似乎正在使用Play-ReactiveMongo(据我所知,JSONCollection不属于ReactiveMongo本身)。如果是这种情况,那么您的代码就不必要了。您可以直接将StudentInfo个对象直接传递给insert,而不是手动执行JSON转换。最小的例子:

val studentInfo: StudentInfo = ...
def collection: JSONCollection = db[JSONCollection]("student")
collection.insert(studentInfo) 

这是Play插件的优雅部分。是的,MongoDB将数据保持为JSON(或BSON,更准确),但您没有处理它。只需确保隐式Writes(或查询时为Reads)在范围内,以及其他必要的导入(例如play.modules.reactivemongo.json._)。

  

现在我需要获取我插入的所有数据。我怎样才能做到这一点?我是   不是要求代码,而是为了想法。

嗯,你想看一下documentation(向下滚动以查看示例),它非常简单,而且没有更多内容。在您的情况下,它可能如下所示:

// perform query via cursor
val cursor: Cursor[StudentInfo] =
     collection.find(Json.obj("lastName" -> "Regmi")).cursor[StudentInfo]

// gather results as list
val futureStudents: Future[List[StudentInfo]] = cursor.collect[List]()

在这种情况下,您将获得姓氏为 Regmi 的所有学生。如果您确实想要检索所有学生,那么您可能需要传递一个空的JsObject作为您的查询。同样,只要隐式Reads在范围内,就没有必要处理JSON转换。

答案 1 :(得分:0)

  • 这是我自己的问题的完整答案

包裹控制器

def findAll = Action.async {

val cursor = Json.obj()

StudentDaoAndEntity.findAllStudent(cursor) map {

  case Nil => Ok("Student Not Found")

  case l:Seq[JsObject] => Ok(Json.toJson(l))
}

}

def findAllStudent(allStd:JsObject):Future [Seq [JsObject]] = {

// gather all the JsObjects in a list

collection.find(allStd).cursor[JsObject].collect[List]()

}