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

Node.js使用原生MongoDB驱动执行insertMany时报Cannot read property 'n'错误

问题根源

你本地安装的MongoDB Node.js原生驱动版本和课程使用的版本不一致,课程用的是v3.x及更早版本,你的版本是v4.0+,该版本对insertMany的返回值结构做了不兼容更新:

  • v3.x版本中insertMany回调的result对象包含result子属性(可读取n字段获取插入条数)、ops属性(可读取插入的文档数组)
  • v4.0+版本直接移除了result子属性,插入条数对应顶层的insertedCount字段,插入的文档ID对应顶层的insertedIds对象,不存在ops属性,所以访问result.result.n时会因为result.result为undefined抛出报错。
修复方案

方案1:修改代码适配新版本驱动

把insertDocuments方法里的两行断言修改为:

assert.equal(err, null);
// 校验插入条数为3
assert.equal(3, result.insertedCount);
// 校验插入的ID数量为3,不需要的话可以删除该行
assert.equal(3, Object.keys(result.insertedIds).length);

修改后执行node app.js即可正常输出目标日志。
如果启动时出现拓扑相关的警告,可以在创建MongoClient时新增useUnifiedTopology: true参数:

const client = new MongoClient(url, { useNewUrlParser: true, useUnifiedTopology: true });

方案2:降级驱动版本和课程保持一致

执行以下命令重装v3版本的MongoDB驱动:
npm uninstall mongodb && npm install mongodb@3
无需修改原有代码,直接运行项目即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:27:03