3

I have this data structure in my MongoDB database:

"menu": [
        {
            "dishCategory":"61e6089f209b802518e2b4a4",
            "dishMeals": [
                {
                    "dishMealName": "Burger King",
                    "dishMealIngredients": "Burger lepinja, bbq sos, berlin sos, zelena"
                    "dishMealPrice": 5
                }
            ]
        }
    ]

How do I push a new object inside dishMeals in exact dishCategory ( I am providing dishCategoryId, newDish object and _id of restaurant through req.body) I've tried this but nothing is changing:

await Restaurants.updateOne(
        {
            '_id' : _id,
            'menu.dishCategory' : dishCategoryId
        },
        {
            $push : {
                'menu.$.dishMeals' : newDish
            }
        }
    );

3 Answers 3

4
  1. Use arrayFilters to filter the nested document(s) in the array field, then $push if the filter criteria in the arrayFilters met.
db.collection.update({
  "_id": _id,
  "menu.dishCategory": dishCategoryId
},
{
  $push: {
    "menu.$[menu].dishMeals": newDish
  }
},
{
  arrayFilters: [
    {
      "menu.dishCategory": dishCategoryId
    }
  ]
})

Sample Mongo Playground

Sign up to request clarification or add additional context in comments.

2 Comments

Sorry I've made a mistake I have "dishCategory":"61e6089f209b802518e2b4a4" not the object one like earlier. When I try like this "menu.dishCategory": dishCategoryId" Its not working
Demo looks fine for me. Maybe another thing to look up is make sure you pass the value with exact type, for example, if dishCategory is ObjectId, then the value of dishCategoryId must also be ObjectId type as well.
2

You can do it with arrayFilters config in update query:

db.collection.update({
  "restaurant_id": 1
},
{
  "$push": {
    "menu.$[element].dishMeals": {
      "dishMealName": "Best Burger",
      "dishMealIngredients": "Best burger in town",
      "dishMealPrice": 10
    }
  }
},
{
  "arrayFilters": [
    {
      "element.dishCategory._id": "61e6089f209b802518e2b4a4"
    }
  ]
})

Working example

1 Comment

Thank you your method is working fine it was my mistake for not checking if dishCategory is indeed an ObjectId not a string
2

You may read the question and the solution they provided here, Hope this one will be helpful to you.

db.collection.update({
    "_id": 1,
    "menu.dishCategory": "61e6089f209b802518e2b4a4"
},
{
    $push: {
        "menu.$.dishMeals": newMeal
    }
})

Sample Example

1 Comment

Thank you your method is working fine it was my mistake for not checking if dishCategory is indeed an ObjectId not a string

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.