Node.js中使用insert方法无法向MongoDB插入数据问题求助
问题分析与解决
嘿,你遇到的这个问题其实很常见——就是异步操作的执行顺序没处理对!
问题根源
你代码里的docs.insert()是异步方法,它不会立刻完成数据插入,而是要等MongoDB那边处理完才会触发回调函数。但你在调用insert之后马上就执行了db.close(),这相当于插入操作还在进行的时候,你就把数据库连接给切断了,结果就是数据根本没机会写入,回调里的console.log也没机会执行,自然就没任何输出啦。另外,你代码最后还少了一个闭合的),这也是语法错误,会导致代码无法正常运行。
修正后的代码
把db.close()移到insert的回调函数里面,确保只有当插入操作完成(不管成功还是失败)之后,再关闭数据库连接:
var url = 'mongodb://localhost:27017/learnyoumongo'; var mongo = require('mongodb').MongoClient; mongo.connect(url, function(err, db) { if (err) throw err; const myDb = db.db('learnyoumongo'); var docs = myDb.collection('docs'); var obj = {firstName: process.argv[2], lastName: process.argv[3]}; docs.insert(obj, function(err, res){ if(err) throw err; console.log('data inserted'); // 插入完成后再关闭连接 db.close(); }); });
额外提示
如果你的MongoDB驱动版本比较新,其实官方已经推荐使用insertOne或者insertMany来替代旧的insert方法了,不过这属于细节优化,核心问题还是要先把异步操作的执行顺序理顺~
内容的提问来源于stack exchange,提问作者mayank
相关产品推荐
相关产品推荐

