В коллекции 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
}
}
}
]