我正在为scala框架开发一些小的网页,我使用mongodb
会员单据有meberinfo包含会员id,考勤单据有
某人的出勤信息。
所以,我想先找到某个群中的成员,然后
查找成员的出勤信息..
我的代码如下所示...
def attendanceBySubGroup(group: String, sub_group: String) = Action.async{
var obj : JsObject = Json.obj("group" -> group)
if(sub_group ne "All"){
obj = obj + ("sub_group" -> JsString(sub_group))
}
val cursor: Cursor[JsObject] = member_list.find(obj).cursor[JsObject]
// gather all the JsObjects in a list
val futureMemberList: Future[List[JsObject]] = cursor.collect[List]()
val futurePersonsJsonArray: Future[JsArray] = futureMemberList.map {
val m = ArrayBuffer.empty[JsObject]
members => members.map{
member => {
val futureItem = attendance_list.find(Json.obj("member_id" -> member.\("_id").\("$oid"))).one[JsObject]
futureItem.map {
case Some(item) => member.+(("attendance" , item.\("attendance")))
case None => member.++(Json.obj("attendance"-> false))
}
}
}
Json.arr(m.toList)
}
futurePersonsJsonArray.map {
members =>
Ok(members(0))
}
但是,我想要的不是工作
也许,futureItem.map { ..是异步呼叫..。
如何返回包含出勤信息的成员列表..
谢谢你的帮忙
发布于 2016-01-28 19:45:13
我不确定,这是最好的解决方案...
但是它工作正常..
任何人找到更好的solution..please发布你的答案
def attendanceBySubGroup(group: String, sub_group: String) = Action.async{
var obj : JsObject = Json.obj("group" -> group)
if(sub_group ne "All"){
obj = obj + ("sub_group" -> JsString(sub_group))
}
val cursor: Cursor[JsObject] = member_list.find(obj).cursor[JsObject]
// gather all the JsObjects in a list
val futureMemberList: Future[List[JsObject]] = cursor.collect[List]()
val futureMemberListWithAttendance = futureMemberList.map {
members => members.map{
member => {
val futureItem = attendance_list.find(Json.obj("member_id" -> member.\("_id").\("$oid"))).one[JsObject]
futureItem.map[JsObject] {
case Some(item) => member.+(("attendance" , item.\("attendance")))
case None => member.++(Json.obj("attendance"-> false))
}
}
}
}
futureMemberListWithAttendance.map{
val memberAttendances = ArrayBuffer.empty[JsObject]
aa => Await.result(Future.reduce(aa)((s1, s2) => {memberAttendances+=s1; s1 } ) , Duration.Inf)
Ok(Json.arr(memberAttendances))
}
}
https://stackoverflow.com/questions/34985104
复制相似问题