'Pick up specific data from array using spring data mongodb Aggregation
Hi I have the below json structure of "employeeDataModel"
{
"_id" : ObjectId("621c9dc3458d7810a6de4f74"),
"version" : "2.0",
"employeeNumber" : "88526569",
"employeeInformation" : {
"team" : [
{
"primaryMemberIndicator" : true,
"firstName" : "mickey",
"middleName" : "",
"lastName" : "MOUSE",
"suffix" : "Jr."
},
{
"primaryMemberIndicator" : false,
"firstName" : "mini",
"middleName" : "",
"lastName" : "mouse"
}
]
},
}
I need to return the first name concatenated with last name from the team array using the primaryMemberIndicator.
Here is the code I have written.
Aggregation aggregation = newAggregation(
match(empDataCriteria)
project(fieldsWithEmpWorkLookUp)
.and(getPrimaryMemberLastNameExpression()).as("memberLastName")
);
return reactiveMongoTemplate.aggregate(aggregation, EMP_WORK, EmployeeWork.class);
private VariableOperators.Let getPrimaryMemberLastNameExpression() {
VariableOperators.Let value = VariableOperators.Let.define(VariableOperators.Let.ExpressionVariable.newVariable("selectedMember").
forExpression(ArrayOperators.ArrayElemAt.arrayOf(ArrayOperators.Filter.filter("employeeDataModel.employeeInformation.team").as("team")
.by(ComparisonOperators.Eq.valueOf("team.primaryMemberIndicator").equalToValue(true))).elementAt(0)))
.andApply(ConditionalOperators.ifNull("$$selectedMember.lastName")
.then(""));
return value;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
