Spring-MongoDB:如何在使用聚合时以数组形式从文档中返回字段的值

时间:2019-04-12 14:21:43

标签: mongodb spring-mongodb spring-mongo

我的收藏集具有以下文档结构:

{appName: 'test',
appEnv: 'Development'
appTech:'Java'
appVersion: '1_0',
startTime: '2019-04-12...',
deploymentTime: '1000',


appName: 'test',
appEnv: 'SQA',
appTech:'Java',
appVersion: '1_0',
startTime: '2019-04-12...',
deploymentTime: '1100'

appName: 'test22',
ppEnv: 'Development'
appTech:'Java'
appVersion: '1_2',
startTime: '2019-04-10...',
deploymentTime: '1200'

appName: 'test22',
appEnv: 'SQA'
appTech:'Java'
appVersion: '1_1',
startTime: '2019-04-10...',
deploymentTime: '1000'

appName: 'test22',
appEnv: 'SQA'
appTech:'Java'
appVersion: '1_0',
startTime: '2019-04-12...',
deploymentTime: '1000'

appName: 'test2',
appEnv: 'Development'
appTech:'.NET'
appVersion: '1_0',
startTime: '2019-04-10',
deploymentTime: '1000'

}

我正在尝试获取每个AppEnv的DeploymentTime,最近7天,我的代码如下:

Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());

        Date end = DateUtil.atEndOfDay(cal.getTime());
        cal.add(Calendar.DAY_OF_MONTH, -7);
        Date start = DateUtil.atStartOfDay(cal.getTime());

        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("startTime").gte(start).lte(end)),
                Aggregation.project("deploymentTime").and("startTime")
                .dateAsFormattedString("%Y-%m-%d").as("dateOfDeployment").and("appEnv").as("appEnv"),
                Aggregation.group("appEnv","dateOfDeployment").sum("deploymentTime").as("totalTime"),
                Aggregation.project("totalTime","appEnv","dateOfDeployment"),
               Aggregation.sort(Sort.by(Direction.ASC, "totalTime"))
            );

我得到结果,但是对于每个appEnv我得到一个单独的结果:

[
      {
      "appEnv": ["Development"],
      "totalTime": [...],
      "dateOfDeployment": "2019-04-12"
   },
      {
      "appEnv": ["SQA"],
      "totalTime": [...],
      "dateOfDeployment": "2019-04-12"
   },
 {
      "appEnv": ["SQA"],
      "totalTime": [...],
      "dateOfDeployment": "2019-04-10"
   },
      {
      "appEnv": ["Development"],
      "totalTime": [...],
      "dateOfDeployment": "2019-04-10"
   }]

我想要的是特定日期,appEnv和totalTime的列表,如下所示:

     [{
          "appEnv": ["Development","SQA"],
          "totalTime": [...,...],
          "dateOfDeployment": "2019-04-12"
       },
          {
          "appEnv": ["Development","SQA"],
          "totalTime": [...,...],
          "dateOfDeployment": "2019-04-10"
       }]

0 个答案:

没有答案