这是mongoDb文档,其中包含 listItems (以Array的形式)。 如何删除listItems内具有其各自itemItem的对象。
我正在将 itemsId 作为来自url的参数传递
到目前为止,我已经尝试了两件事。
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)
})
}
当我使用上面的代码访问API时,它会删除整个文档,并且为什么删除所有文档也是可以理解的。
我尝试过的另一个代码如下
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)
})
}
这一次我尝试了问题Mongoose delete array element in document and save中提到的解决方案,但无法获得所需的解决方案。
答案 0 :(得分:0)
let deleteItem = (req, res) => {
let itemToBeDeleted = () => {
return new Promise ((resolve, reject) => {
listModel.updateOne(
{listId: req.params.listId}, { $pull: { listItems: { itemsId: req.params.itemId } } }, (err, data) => {
if (err) {
console.log(err);
reject(err);
} else {
resolve(data);
}
}
);
});
}
// calling promise
itemToBeDeleted(req, res)
.then((resolve) => {
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)
})
}
这是解决上述问题的代码。
我击中的Api是
http://localhost:3000/api/v1/list/items/delete/listId/itemsId