如何获取我插入的所有数据?
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]()
}
我使用 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]()
}