Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1575284
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: 架构设计与优化

2015-04-22 20:59:53

Aggregation 源代码



1) 
Get all records

       ticketDB.find(Json.obj("school_bucket" -> "1"))
         .cursor[TicketView].collect[List]().map((tickets: List[TicketView]) => Ok(Json.toJson(tickets)))

2)  Get distinct field
    val distinct = RawCommand(
        BSONDocument("distinct" -> "tickets", "key" -> "school_number", "query" -> BSONDocument("school_bucket" -> "1")))

      // for distinct, but only return one distinct field
      for {
        result1 <- db.command(distinct)
      } yield {
        Ok(toJSON(result1))
      }

3) Get first record for each school

  // return all fields of the first document for each group
      val groupBy = Aggregate("tickets",
        Seq(
          GroupField("school_number")
            (
              "id" -> First("id"),
              "ticket_number" -> First("ticket_number"),
              "school_number" -> First("school_number"),
              "school_bucket" -> First("school_bucket"),
              "school_name" -> First("school_name")
            ),
          Sort(List(Ascending("id"))),
          Match(BSONDocument("school_bucket" -> "1"))
        )
      )

      db.command(groupBy).map(
        s => {
          val result = s.toList.map(doc => toJSON(doc))
          Ok(Json.toJson(result))
        }
      )
阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~