【问题标题】:trying to remove an item from a database试图从数据库中删除一个项目
【发布时间】:2022-01-02 15:39:33
【问题描述】:

对不起,如果我没有很好地解释这一点。我正在尝试使用此按钮从数据库中删除,但每当我尝试删除时,它只会删除数据库中的第一项。我很确定我得到的 ID 有问题。谁能发现我在这里遗漏的任何明显问题?

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 });
      }; 
    });

【问题讨论】:

  • 您需要将参数作为对象传递。 axios.delete(/tm/v1/tasks/, {id: 'asd'})

标签: javascript mongoose mongoose-schema


【解决方案1】:

两种解决方案 -

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

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

解释 -

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

findByIdAndDelete 也适用于字符串值!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多