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

How to get all data I have Inserted?

我使用 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)
  }

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

首先:您似乎正在使用 Play-ReactiveMongo(据我所知,JSONCollection 不是 ReactiveMongo 本身的一部分)。如果是这种情况,那么您的代码就不必要地复杂了。您无需手动进行 JSON 转换,只需将 StudentInfo 对象直接传递给 insert。最小示例:

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

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


Now I need to get all data I have inserted. How can I do that? I am not asking for code but for Idea.

好吧,你想看看 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 转换。

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

包控制器

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): 未来[Seq[JsObject]] = {

// gather all the JsObjects in a list

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

}