Spring-MongoDB: как вернуть значения поля из документов в виде массива при использовании агрегации - PullRequest
0 голосов
/ 12 апреля 2019

Моя коллекция имеет структуру документа ниже:

{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, за последние 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": ["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"
       }]
...