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

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,缺少闭合引号,会导致后端解析请求体出错

修复步骤

  1. 修正Postman传参的语法问题:
{
  "languages":["korean","Hindi"],
  "storeType":["gas station"],
  "intrestedIn":["sarees"]
}
  1. 修正后的代码(以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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:15:04