MongoDB Node.js报错:assert.equal(3, result.result.n)运行提示n未定义
错误原因
- 你使用的是MongoDB Node.js驱动4.0及以上版本,而复制的示例代码是适配3.x旧版本的,新旧版本
insertMany接口的返回值结构差异导致报错:4.0+版本返回的结果对象已经移除了result属性,因此访问result.result.n时会触发Cannot read property 'n' of undefined的错误。
修复方案
两种修复方式可选,优先推荐第一种适配新版本的写法:
方式1:修改代码适配新版本驱动
把insertDocuments函数里的断言字段替换为新版本对应属性即可:
- 原
result.result.n替换为result.insertedCount,用于校验成功插入的文档总数 - 原
result.ops替换为result.insertedIds,用于校验返回的插入文档ID数量
修改后的完整代码如下:
const MongoClient = require('mongodb').MongoClient; const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'FruitsDB'; const client = new MongoClient(url, {useNewUrlParser: true}); // Use connect method to connect to the server client.connect(function(err) { assert.equal(null, err); console.log("Connected successfully to server"); const db = client.db(dbName); insertDocuments(db, function() { client.close(); }); }); const insertDocuments = function(db, callback) { // Get the documents collection const collection = db.collection('fruits'); // Insert some documents collection.insertMany([ {a : 1}, {a : 2}, {a : 3} ], function(err, result) { assert.equal(err, null); assert.equal(3, result.insertedCount); assert.equal(3, Object.keys(result.insertedIds).length); console.log("Inserted 3 documents into the collection"); callback(result); }); }
方式2:回退驱动到3.x版本
如果你不想修改原有代码,可以直接安装3.x版本的MongoDB驱动,执行以下npm命令即可:npm install mongodb@3
内容的提问来源于stack exchange,提问作者MelancholicDreamer11
相关产品推荐
相关产品推荐

