1

My database design is like this and wants to update all those objects whose date greater than to "2020-02-02T00:00:00.000Z" date and less than to "2020-02-04T00:00:00.000Z" date. I am using $elemMatch but it doesn't work properly. please help.

 {
            "_id" : ObjectId("5e6a8b9cc71c679e92b6d4b6"),
            "employee_id" : ObjectId("5e67dce79b12c80c18240f37"),
            "__v" : 0,
            "attandence_array" : [ 
                {
                    "stay_hour" : 0,
                    "is_on_leave" : false
                    "date" : "2020-02-01T00:12:00.000Z"
                }, 
                {
                    "stay_hour" : 0,
                    "is_on_leave" : false
                    "date" : "2020-02-02T00:00:00.000Z"
                }, 
                {
                    "stay_hour" : 0,
                    "is_on_leave" : false,
                    "date" : "2020-02-03T00:00:00.000Z"
                }, 
                {
                    "stay_hour" : 0,
                    "is_on_leave" : false,
                    "date" : "2020-02-04T00:00:00.000Z"
                }, 
                {
                    "stay_hour" : 0,
                    "is_on_leave" : false,
                    "date" : "2020-02-05T00:00:00.000Z"
                }
            ]
        }

OutPut like this

    {
        "_id" : ObjectId("5e6a8b9cc71c679e92b6d4b6"),
        "employee_id" : ObjectId("5e67dce79b12c80c18240f37"),
        "__v" : 0,
        "attandence_array" : [ 
            {
                "stay_hour" : 0,
                "is_on_leave" : false
                "date" : "2020-02-01T00:12:00.000Z"
            }, 
            {
                "stay_hour" : 0,
                "is_on_leave" : true
                "date" : "2020-02-02T00:00:00.000Z"
            }, 
            {
                "stay_hour" : 0,
                "is_on_leave" : true
                "date" : "2020-02-03T00:00:00.000Z"
            }, 
            {
                "stay_hour" : 0,
                "is_on_leave" : true
                "date" : "2020-02-04T00:00:00.000Z"
            }, 
            {
                "stay_hour" : 0,
                "is_on_leave" : false,
                "date" : "2020-02-05T00:00:00.000Z"
            }
        ]
    }
mickl
  • 48,568
  • 9
  • 60
  • 89
Vishnu Chauhan
  • 301
  • 2
  • 12

1 Answers1

2

You can use arrayFilters:

Model.update(
    { "_id" : ObjectId("5e6a8b9cc71c679e92b6d4b6") }, 
    { $set: { "attandence_array.$[at].is_on_leave": true } }, 
    { arrayFilters: [ { "at.date": { $gt: "2020-02-02T00:00:00.000Z", $lt: "2020-02-04T00:00:00.000Z" } } ] })
mickl
  • 48,568
  • 9
  • 60
  • 89