Tengo esta estructura de datos en mi base de datos MongoDb:
"menu": [ { "dishCategory":"61e6089f209b802518e2b4a4", "dishMeals": [ { "dishMealName": "Burger King", "dishMealIngredients": "Burger lepinja, bbq sos, berlin sos, zelena" "dishMealPrice": 5 } ] } ]
¿Cómo presiono un nuevo objeto dentro de dishMeals en la categoría de plato exacta (estoy proporcionando el id de categoría de plato, el objeto de plato nuevo y el _id de restaurante a través de req.body) He intentado esto pero nada cambia:
await Restaurants.updateOne( { '_id' : _id, 'menu.dishCategory' : dishCategoryId }, { $push : { 'menu.$.dishMeals' : newDish } } );
arrayFilters
para filtrar los documentos anidados en el campo de matriz, luego $push
si se cumplen los criterios de filtro en arrayFilters
. db.collection.update({ "_id": _id, "menu.dishCategory": dishCategoryId }, { $push: { "menu.$[menu].dishMeals": newDish } }, { arrayFilters: [ { "menu.dishCategory": dishCategoryId } ] })
Puede hacerlo con la configuración de arrayFilters
en la consulta de update
:
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" } ] })