'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 |
