0

enter image description here

This is the mongoDb document and it have listItems in it in form of Array. How can I delete the objects inside listItems with their respective itemsId.

I'm passing itemsId as a params from url

So far I've tried two things.

let deleteItem = (req, res) => {
  let itemToBeDeleted = () => {
    return new Promise ((resolve, reject) => {
      listModel.findOneAndDelete({ 'listItems.itemsId': { $in: [req.params.itemId] } }, (err, data) => {
        if (err) {
          logger.error('Failed to delete Item/ Item Not Found', 'listController: deleteItems()', 5);
          let apiResponse = response.generate(true, 'Failed to delete List', 400, null);
          reject(apiResponse);
        } else {
          resolve(data);
        }
      });
    });
  }


  itemToBeDeleted(req, res)
    .then((resolve) => {
      console.log("===============");
      console.log(resolve);
      console.log("===============");

      let apiResponse = response.generate(false, 'Item Deleted Succesfully', 200, resolve);
      res.status(200).send(apiResponse)
    })
    .catch((err) => {
      console.log(err);
      let apiResponse = response.generate(true, 'Failed to delete Item: Item Not found or There is some problem while deleting', 400, null);
      res.status(400).send(apiResponse)
    })
}

When I hit the API with the above code and it deletes the entire document and it's understandable why it deletes all.

Another Code I tried is as follows

let deleteItem = (req, res) => {
  let itemToBeDeleted = () => {
    return new Promise ((resolve, reject) => {
      listModel.update({ 'listItems.itemsId': { $in: [req.params.itemId] }}, { $pull: {itemsId: req.params.itemId }}, (err, data) => {
        if (err) {
          logger.error('Failed to delete Item/ Item Not Found', 'listController: deleteItems()', 5);
          let apiResponse = response.generate(true, 'Failed to delete List', 400, null);
          reject(apiResponse);
        } else {
          resolve(data);
        }
      });
    });
  }


  itemToBeDeleted(req, res)
    .then((resolve) => {
      console.log("===============");
      console.log(resolve);
      console.log("===============");
      let apiResponse = response.generate(false, 'Item Deleted Succesfully', 200, resolve);
      res.status(200).send(apiResponse)
    })
    .catch((err) => {
      console.log(err);
      let apiResponse = response.generate(true, 'Failed to delete Item: Item Not found or There is some problem while deleting', 400, null);
      res.status(400).send(apiResponse)
    })
}

This time I tried the solution mentioned in this question Mongoose delete array element in document and save but I'm not able to get the desired solution.

0 Answers0