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

Express Put方法中MongoDB upsertedId为null的问题求助

问题排查:MongoDB Upsert操作无匹配无插入的原因

1. 核心错误:参数拼写错误

你在options对象里把MongoDB的upsert参数拼错了——写成了upsurt,正确的参数名是upsert(少了字母e)。因为参数名不匹配,MongoDB无法识别你的upsert需求,所以既不会更新现有文档,也不会插入新文档,最终返回全0的计数结果。

修正后的代码片段:

const options = { upsert: true }; // 修正拼写错误

2. 潜在逻辑问题(修正拼写后需注意)

你的更新逻辑存在字段覆盖的冗余:

  • 筛选条件filter指定匹配email: "sabbir195661@gmail.com"的文档
  • 更新语句updateDoc又用$set把email改成"mukit"

如果数据库中存在匹配文档,执行后该文档的email会被覆盖;如果upsert生效(修正拼写后),无匹配时会插入一个email为mukit的新文档(因为MongoDB会先基于filter创建基础文档,再应用$set的修改)。如果你的需求是插入指定email的新文档,可以直接调整updateDoc的逻辑,避免这种冗余的字段覆盖。

3. 修正后的预期结果

修正拼写错误后执行代码:

  • 若存在匹配文档:返回matchedCount: 1, modifiedCount: 1
  • 若不存在匹配文档:返回upsertedCount: 1, upsertedId: ObjectId("xxx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:46:09