'Convert mongodb query into Spring data mongodb syntax

I am trying to convert this query spring data mongo syntax but facing issue with $add operator.

{
        "$project":
            {
              
                "nextYear": {
                    "$dateFromParts":
                        {
                            "year": { "$add": [{ "$year": "$today" }, 1] },
                            "month": { "$dayOfMonth": "$joiningDate" },
                            "day": { "$month": "$joiningDate" }

                        }

                }
            }
    }

Tried this without $add it is working, but cant find any documentation regarding $add.

 aggregationOperations.add(Aggregation.project()                       
                    .and(DateOperators.DateFromParts.dateFromParts()
                            .year(DateOperators.Year(yearOf("today")))
                            .month(dateOf("joiningDate").dayOfMonth())
                            .day(monthOf("joiningDate"))).as("nextYear"));


Solution 1:[1]

If pipeline stage looks too difficult or you don't know how to convert it using spring, just try to use this way

  import org.bson.Document;
  import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
  ...

  AggregationOperation project = ctx -> Document.parse("""
         { "$project": {
          
            "nextYear": {
                "$dateFromParts":
                    {
                        "year": { "$add": [{ "$year": "$today" }, 1] },
                        "month": { "$dayOfMonth": "$joiningDate" },
                        "day": { "$month": "$joiningDate" }

                    }

            }
        }}
            """);

Solution 2:[2]

Found the solution(not by converting this exact query in spring data).

Used java.util.Calendar to get year value and passed the values to dateFromParts year function

 Calendar calendar = Calendar.getInstance();
 calendar.setTime(new Date());


 aggregationOperations.add(Aggregation.project()                       
                    .and(DateOperators.DateFromParts.dateFromParts()
                            .year(calendar.get(Calendar.YEAR) + 1)
                            .month(dateOf("joiningDate").dayOfMonth())
                            .day(monthOf("joiningDate"))).as("nextYear"));

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2