You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击删除按钮仅删除数据库首条记录,ID相关问题排查求助

问题核心原因

  • 可能性1:前端渲染任务列表时,所有删除按钮的data-id属性都绑定了第一条记录的id,导致每次传给后端的都是同一个id
  • 可能性2:后端查询条件写错,MongoDB默认主键字段为_id,你代码中用{ id }作为查询条件,会去匹配自定义的id字段,如果你没有在模型中定义这个字段,要么匹配不到记录,要么逻辑异常时就会误删第一条

排查与修复方案

  1. 先确认前端传参是否正确:在前端点击事件中打印id,添加代码console.log('当前删除的id:', id),如果每次打印的id都是第一条记录的id,直接修改列表渲染逻辑,给每个删除按钮绑定对应条目的唯一id即可。
  2. 如果前端传的id是正确的,修改后端接口代码即可:
app.delete("/tm/v1/tasks/:id", async (req, res) => {
  try {
    const id = req.params.id;
    // 用mongoose提供的findByIdAndDelete直接匹配默认主键_id字段
    const deletedTask = await Task.findByIdAndDelete(id);
    // 增加空判断,避免不存在的id也返回删除成功
    if (!deletedTask) {
      return res.status(404).json({ msg: '待删除任务不存在' });
    }
    res.status(200).json({ msg: 'deleted' });
  } catch (error) {
    res.status(500).json({ msg: error });
  }; 
});

如果你确实在Task模型中自定义了名为id的主键字段,确认传入的id类型和数据库中存储的类型一致,比如数据库存的是数字类型,前端传的是字符串的话也会匹配失败,可以做类型转换后再查询:

const id = Number(req.params.id);
const deletedTask = await Task.findOneAndDelete({ id });

内容的提问来源于stack exchange,提问作者Hamoomoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:04