MongoDB如何更新现有文档?updateOne返回nModified:0不生效问题排查
问题原因分析
返回{ n: 0, nModified: 0, ok: 1 }说明MongoDB已成功接收请求,但未匹配到符合条件的文档,因此没有执行修改操作,你的代码和参数存在4个问题:
- 代码语法错误:
updateOne方法的右括号提前闭合,导致更新配置没有被正确传入 - _id类型不匹配:MongoDB默认
_id为ObjectId类型,若你传入的userPreferredExists._id是字符串格式,会无法匹配到对应文档 $push用法错误:直接给$push传入数组会把整个数组作为单个元素插入目标数组,要实现逐个插入数组元素需要搭配$each修饰符- Postman传参语法错误:
languages数组中的"korean,缺少闭合引号,会导致后端解析请求体出错
修复步骤
- 修正Postman传参的语法问题:
{ "languages":["korean","Hindi"], "storeType":["gas station"], "intrestedIn":["sarees"] }
- 修正后的代码(以Mongoose为例):
// 先将字符串类型的_id转为MongoDB可识别的ObjectId类型 const targetId = mongoose.Types.ObjectId(userPreferredExists._id); const userUpdatedPassword = await UserPreferred.updateOne( { _id: targetId }, { $push: { languages: { $each: req.body.languages }, storeType: { $each: req.body.storeType }, intrestedIn: { $each: req.body.intrestedIn } } } );
可选调试验证
如果修改后仍未生效,可以先打印userPreferredExists._id的值,确认和数据库中目标文档的_id完全一致;同时确认后端已配置JSON解析中间件(如Express的express.json()),保证req.body能正常获取到请求参数。
内容的提问来源于stack exchange,提问作者Suman
相关产品推荐
相关产品推荐

