试图从数据库中删除项目



如果我没有很好地解释这一点,很抱歉。我正试图使用此按钮从数据库中删除,但每当我尝试删除时,它只会删除数据库中的第一个项目。我确信我拿到的身份证有问题。有人能发现我在这里遗漏的任何明显问题吗?

Button Press:
tasksDOM.addEventListener('click', async (e) => {
const el = e.target
if (el.parentElement.classList.contains('delete-btn')) {
loadingDOM.style.visibility = 'visible'
const id = el.parentElement.dataset.id
try {
await axios.delete(`/tm/v1/tasks/${id}`)
showTasks()
} catch (error) {
console.log(error)
}
}
loadingDOM.style.visibility = 'hidden'
})

Delete:
app.delete("/tm/v1/tasks/:id", async (req, res) => {
try {
const id = req.params.id;
const response = await Task.findOneAndDelete({ id });
res.status(200).json({ msg: 'deleted' });
} catch (error) {
res.status(500).json({ msg: error });
}; 
});

两种解决方案-

1. const response = await Task.findByIdAndDelete(id);
2. const response = await Task.findOneAndDelete({ _id : mongoose.Types.ObjectId(id) });

不要忘记为第二种方法导入mongoose

解释-

在您的代码中,findOneAndDeleteid作为参数,这对于mongoose来说是不存在的,因此默认情况下,它会删除第一个条目,因此您需要在此处使用_id。第二件事是,idparam是字符串类型,_id是ObjectId,所以它不匹配。要匹配此项,您需要将此字符串值转换为mongoose ObjectId。

findByIdAndDelete也适用于字符串值!

最新更新