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.