Мои записи выглядят следующим образом:
{
domain: 'ABC',
technology: 'Java',
appName: 'app1',
environment: 'Dev',
version : '1_1',
domain: 'ABC',
technology: 'Java',
appName: 'app1',
environment: 'SQA',
version : '1_1',
domain: 'ABC',
technology: 'Java',
appName: 'app2',
environment: 'Dev',
version : '1_1',
domain: 'DEF',
technology: '.NET',
appName: 'app3',
environment: 'SQA',
version: '1_3'
}
Окончательный результат - получение списка среды и версии приложений, сгруппированных по доменам и технологиям (соотношение 1: 1 между этими двумя).Окружающая среда / Домен / Технология будет входом.если эта среда не существует, то я все еще хочу показать результат с версией N / A.
[
{
"domain": "ABC",
"technology": "Java",
"apps": [
{
"appName": "app1",
"environment": ["Dev","SQA"],
"version": ["1_1", "1_1"],
"hasVersionDiff": false
},
{
"appName": "app2",
"environment": ["Dev","SQA"],
"version": ["1_1", "N/A"],
"hasVersionDiff": true }]
},
{
"domain": "DEF",
"technology": ".NET",
"apps": [ {
"appName": "app3",
"environment": ["Dev","SQA"],
"version": ["N/A", "1_1"],
"hasVersionDiff": true
}
]
}]
До сих пор я пробовал ниже:
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(cr),
Aggregation.group("domain").first("technology").as("technology")
.addToSet(new BasicDBObject() {
{
put("technology", "$technology");
put("domain", "$domain");
put("environment","$environment");
put("version", "$version");
put("appName", "$appName");
}
}
).as("apps"));
Но этодает мне результат, как показано ниже, где для каждого приложения он показывает мне две записи diff для каждого env, также я не могу понять, как применить для них значение hasVersionDiff:
[
{
"domain": "ABC",
"technology": "Java",
"apps": [ {
"appName": "app1",
"environment": ["DEV"],
"version": ["1_1"],
"hasVersionDiff": false
}, {
"appName": "app1",
"environment": ["SQA"],
"version": ["1_1"],
"hasVersionDiff": false
}
]
}
и т.д ..
Мой класс модели выглядит следующим образом: CompareResult имеет домен, технологию и приложения ArrayList. Приложение имеет appName, список сред, список версий и логическое значение hasVersionDiff.