点击删除按钮仅删除数据库首条记录,ID相关问题排查求助
问题核心原因
- 可能性1:前端渲染任务列表时,所有删除按钮的
data-id属性都绑定了第一条记录的id,导致每次传给后端的都是同一个id - 可能性2:后端查询条件写错,MongoDB默认主键字段为
_id,你代码中用{ id }作为查询条件,会去匹配自定义的id字段,如果你没有在模型中定义这个字段,要么匹配不到记录,要么逻辑异常时就会误删第一条
排查与修复方案
- 先确认前端传参是否正确:在前端点击事件中打印
id,添加代码console.log('当前删除的id:', id),如果每次打印的id都是第一条记录的id,直接修改列表渲染逻辑,给每个删除按钮绑定对应条目的唯一id即可。 - 如果前端传的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
相关产品推荐
相关产品推荐

