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.

7
  • 1
    Hi, recently answered a similar question. If that answer helps you, you can upvote. Commented Dec 9, 2019 at 15:45
  • Okay, thanks I'll let u know!! Commented Dec 9, 2019 at 15:53
  • Thanks Man, It worked as expected!!! Commented Dec 9, 2019 at 16:31
  • Hi, happy that it worked, I would appreciate if you can upvote my answer. Commented Dec 9, 2019 at 16:32
  • Sure Done Already!!! Commented Dec 9, 2019 at 16:39

0

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.