skip to Main Content

I’ve a MongoDB collection that contains records with a field called createdAt, I want to get the last createdAt in the previous month of a given date using mongoTemplate aggregation in a spring boot application.

example of a record:

{
  createdAt: new Date('2022-11-01'), 
  //other fields ...
}

Note:

Let say for 22/11/2022 given date, and we have records with createdAt fields are 12/10/2022, 22/10/2022, 27/10/2022; I wanna get the date : 27/10/2022

2

Answers


  1. if you are using mongo template you could find it like this:

    template.aggregate(
                            newAggregation(
                                match(Criteria.where("createdAt").lt(new Date(2022,11,01))),//<--- here you pass the month in question
                                project("createdAt").andExclude("_id"),
                                   group().addToSet("createdAt").as("LATEST_DATES"),
                                    unwind("LATEST_DATES"),
                                    sort(Sort.Direction.DESC, "LATEST_DATES"),
                                    limit(1),//to get only one
                                    project().andExclude("_id")
                            ),
                            "YOUR COLLECTION NAME",
                            DBObject.class
                    )
    
    Login or Signup to reply.
  2. You can do that like this :
    First create a date of first day of current month.

    firstDayOfCurrentMonth = LocalDate.now().withDayOfMonth(1))
    

    then use it in query:

    newAggregation(
          match(Criteria.where("createdAt").lt(firstDayOfCurrentMonth))),
          sort(Sort.Direction.DESC, "createdAt"),
          limit(1)
        )
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search