Home > Back-end >  MongoDB - Remove object from SubArray
MongoDB - Remove object from SubArray

Time:01-25

I'm trying to remove an object from a subarray with no luck getting updateOne() is not a function and remove() is not function.

I want to remove the 'subcat 1' object with id of '61cae5daf5bfbebd7cf748ef':

[
 {
     _id: '61cae5daf5bfbebd7cf748ee'
     title: 'category 1',
     SubCats: [
         {
             _id: '61cae5daf5bfbebd7cf748ef'
             name: 'subcat 1',
             image: '/assets/images/vr-box-6203301_1920.jpg',
         },
         {
             _id: '61cae5daf5bfbebd7cf748fb'
             name: 'subcat 2',
             image: '/assets/images/galaxy-s20_highlights_kv_00.jpg',
         },
     ]
 },
]

Please help

Controller:

const deleteSubCategory = asyncHandler(async (req, res) => {
 const subCategory = await Category.aggregate([
     { $unwind: "$SubCats" }, 
     { $replaceRoot: { newRoot: '$SubCats'} }, 
     { $match: { _id: ObjectId(req.params.id) }}
 ])

 if (subCategory) {
     await subCategory.updateOne({ $pull: {_id: ObjectId(req.params.id)}})
    res.json({ message: 'sub-category removed' })
 } else {
     res.status(404)
     throw new Error('sub-Category not found')
 }
})

CodePudding user response:

$update with $pull

db.collection.update({
  "SubCats._id": "61cae5daf5bfbebd7cf748ef"
},
{
  "$pull": {
    SubCats: {
      _id: "61cae5daf5bfbebd7cf748ef"
    }
  }
},
{
  "multi": true
})

mongoplayground

  •  Tags:  
  • Related