'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