Spring MongoDB группа с несколькими агрегатными операциями при условии - PullRequest
0 голосов
/ 27 марта 2020

В коллекции MongoDB я хочу сгруппировать по полям и некоторым агрегатным операциям.

 GroupOperation groupOperation= Aggregation.group("name").count().as("mygrop").sum("age").as("myage").avg("age").as("ageAVG");

Если я написал в одну строку без разрыва строки, которая возвращает точные результаты, ниже генерации запроса.

[
  {
    "$group": {
      "_id": "$name",
      "mygrop": {
        "$sum": 1
      },
      "myage": {
        "$sum": "$age"
      },
      "ageAVG": {
        "$avg": "$age"
      }
    }
  }
]

Но я хочу передавать поля и агрегировать операции динамически.

   String countField = "mycount";
    String sumField = "age";
    String avgField = "age";
    GroupOperation groupOperation = Aggregation.group(groupField);
    if(null != countField){
      groupOperation.count().as(countField);
    }
    if (null != sumField) {
        groupOperation.sum(sumField).as("sum"+avgField);
    }
    if (null != avgField) {
        groupOperation.avg(avgField).as("avg"+avgField);
    }

Его генерация ниже запроса.

 [
  {
    "$group": {
      "_id": "$name"
    }
  }
]

Который не добавляет countField, sumField и avgField совокупные операции. countField не равно нулю, необходимо добавить операцию подсчета в свою группу, как показано ниже.

[
  {
    "$group": {
      "_id": "$name",
      "mygrop": {
        "$sum": 1
      }
    }
  }
]
...