MongoDB Spring实现(聚合查询)

来源:互联网 发布:李兴华java视频百度云 编辑:程序博客网 时间:2024/05/17 01:47
  /**   * 计算某公司每个员工入职以来工作总天数(打卡总数)   * <pre>   *    db.runCommand({   *         "aggregate": "interactEventHistory",   *         "pipeline": [   *             {   *                 "$match": {   *                     K: V,   *                 }   *             },   *             {   *                 "$project": {   *                     "companyId": 1,   *                     "userId": 1   *                 }   *             },   *             {   *                  "$group": {   *                      "_id": {   *                          "companyId": "$companyId",   *                          "userId": "$userId"   *                      },   *                      "signInCount": {   *                         "$sum": 1   *                      }   *                  }   *             },   *             {   *                 "$project": {   *                     "_id": 0,   *                     "companyId": "$_id.companyId",   *                     "userId": "$_id.userId",   *                     "signInCount": 1   *                 }   *             }   *         ]   *    })   * </pre>   */ Aggregation agg = Aggregation.newAggregation(       match(criteria),       project("companyId", "userId"),       group("companyId", "userId").count().as("signInCount"),       project(Fields.fields("signInCount")                     .and("companyId", "_id.companyId")                     .and("userId", "_id.userId")              ).andExclude("_id"));AggregationResults<Map> aggResult = (AggregationResults) mongoTemplate    .aggregate(agg, "signInHistory", Object.class);List<Map> mapResults = aggResult.getMappedResults();
// 操作之前   {      "_id": {         "companyId": "54fd0343e4b055a0030461fb",         "userId": "54f23343e4b055a0030461f5"      },      "salary": 3500,      "grantDate": ISODate("2015-08-10T06:34:09.719Z")   }// 操作之后   {      "previous": {         "companyId": "54fd0343e4b055a0030461fb",         "userId": "54f23343e4b055a0030461f5"      },      "salarys": {         "salary": 3500,         "grantDate": ISODate("2015-08-10T06:34:09.719Z")      }   }/**  * MongoDB部分命令  *        {  *             "$project": {  *                 "_id": 0,  *                 "previous": "$_id",  *                 "salarys" : {   *                     "salary" : "$salary",  *                     "grantDate": "$grantDate"   *                 }  *             }  *         }  */// 相应代码project("_id", "salary", "grantDate").and("previous").previousOperation()         .and("salarys").nested(Aggregation.bind("salary", "salary")                                           .and("grantDate", "grantDate")                               )
0 0
原创粉丝点击