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

MongoDB updateOne报“Expected 2-3 arguments but got 4”错误怎么解决?

解决MongoDB updateOne参数错误及返回文档的问题

错误原因分析

你遇到的Expected 2 - 3 arguments but got 4错误,根源是两个问题:

  • 同时混用了await(Promise异步写法)和回调函数,导致多传了一个参数——updateOne最多只接受3个参数:查询条件、更新操作、配置选项
  • 用错了方法:updateOne不支持new: true选项,而且它不会返回目标文档,只会返回操作的统计结果(比如匹配数、修改数)

正确解决方案

如果核心需求是拿到插入的新文档或匹配的现有文档,改用findOneAndUpdate;如果只需要确认操作结果,就修正updateOne的调用方式。

方案1:获取插入/匹配的文档(推荐)

使用findOneAndUpdate,配置upsert: true实现“存在则更新,不存在则插入”,再用returnDocument: 'after'指定返回更新后的(或新插入的)文档:

const doc = await users.findOneAndUpdate(
  { address },
  { $set: { address, referralCode } },
  { upsert: true, returnDocument: 'after' } // MongoDB 4.2+版本用这个;旧版本可替换为new: true
);
console.log(doc); // 这里就是你要的目标文档

方案2:仅获取操作统计结果(用updateOne)

如果不需要拿到文档,只需要确认操作状态,去掉多余的回调函数即可:

const result = await users.updateOne(
  { address },
  { $set: { address, referralCode } },
  { upsert: true }
);
// 打印操作统计信息
console.log(`匹配${result.matchedCount}个文档,修改${result.modifiedCount}个文档,是否插入新文档:${result.upsertedId ? '是' : '否'}`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:32:39