mpt madhushan
mpt madhushan

Reputation: 48

I need to push into nested array in node mongoose

I used node mongoose. I need to update this array push new item into Breackfast(mealList.foodList.breackfast || any), I want to add new foodlist by time can you please give me suggestion for how to do,

    {
        "_id": "5fe43eb44cd6820963c98c32",
        "name": "Monday Diet",
        "userID": "5f225d7458b48d0fe897662e",
        "day": "Monday",
        "type": "private",
        "mealList": [
            {
                "_id": "5fe43eb44cd6820963c98c33",
                "time": "Breakfast",
                "foodList": [
                    {
                        "_id": "5fe43eb44cd6820963c98c34",
                        "foodName": "Eggs",
                        "Qty": "2",
                        "calories": "calories",
                        "category": "category"
                    }
                    
                ]
            },
            {
                "_id": "5fe43eb44cd6820963c98c36",
                "time": "Lunch",
                "foodList": [
                    {
                        "_id": "5fe43eb44cd6820963c98c37",
                        "foodName": "food1",
                        "Qty": "100g"
                    },
                ]
            }
        ],
        "createdAt": "2020-12-24T07:09:40.141Z",
        "updatedAt": "2020-12-24T07:09:40.141Z",
        "__v": 0
    }

I tried:

Diet.updateOne(
    { "Diet.mealList._id": req.body.mealId },
    // { $push: { "Diet.0.mealList.$.foodList": req.body.foodList } },
    { $push: { foodList: req.body.foodList } }
)

Upvotes: 0

Views: 105

Answers (1)

turivishal
turivishal

Reputation: 36104

Few Fixes:

  • convert your string _id to object type using mongoose.Types.ObjectId
  • remove Diet from first and push object in foodList
Diet.updateOne({
  "mealList._id": mongoose.Types.ObjectId(req.body.mealId)
},
{
  $push: {
    "mealList.$.foodList": req.body.foodList
  }
})

Playground

Upvotes: 1

Related Questions