使用Mongoose调用deleteOne删除MongoDB数据返回deletedCount为0是什么原因?
问题原因
- 前端表单的隐藏字段存在多余空格:你提供的前端代码中,
nama对应的隐藏输入框value属性,在<%= contact.nama %>模板输出后多了一个尾部空格,最终提交到后端的req.body.nama实际值为izam(末尾携带空格)。你可以从控制台打印的req.body.nama=izam看到,输出的izam末尾有明显空格。 - MongoDB查询为精确字符串匹配:数据库中存储的
nama字段值为izam(无尾部空格),和提交的带空格字符串不相等,因此deleteOne没有命中任何记录,返回deletedCount: 0。
修复方案
- 基础修复:删除前端隐藏输入框
value属性里的多余空格即可:
<input type="hidden" name="nama" value="<%= contact.nama %>">
- 兼容优化:后端查询时对传入值做首尾去空格处理,避免类似的空白字符问题:
Contact.deleteOne({ nama: req.body.nama.trim() })
- 最佳实践:建议改用文档唯一主键
_id作为删除条件,避免重名或者字符串匹配误差,数据操作的准确性更高。
内容的提问来源于stack exchange,提问作者Herahadi An
相关产品推荐
相关产品推荐

