mongodb 连接的问题
发布于 11 年前 作者 taomeejack 4165 次浏览 最后一次编辑是 8 年前

刚接触 node 准备用来做内部的web 工具 按照大部分教程 在连接 mongodb 的时候 都是 类似 mongodb.open(function (err, db) { if (err) { return callback(err); } db.collection(’’, function (err, collection) { if (err) { mongodb.close(); return callback(err); } collection.findOne( db.close() }); });

先open 在 collection 最后 再 close 用的时候发现有问题 一次处理多个插入的时候 容易报错 候来看mongo 官方的 已经不是这样做了

var MongoClient = require(‘mongodb’).MongoClient , format = require(‘util’).format;

MongoClient.connect(‘mongodb://127.0.0.1:27017/test’, function(err, db) { if(err) throw err;

var collection = db.collection('test_insert');
collection.insert({a:2}, function(err, docs) {

  collection.count(function(err, count) {
    console.log(format("count = %s", count));
  });

  // Locate all the entries using find
  collection.find().toArray(function(err, results) {
    console.dir(results);
    // Let's close the db
    db.close();
  });      
});

}) 这个是官方的 我在connect 回调 里面 拿到 db 后 放在了全局里面 再也没有 close 过 就好了 不知道大家遇到过没有

2 回复

报错是因为db操作是异步的 可能是还没有close的时候又open了一下 保持一个全局的db连接也不会占太多的内存 反而是一会close一会open延时会提高不少吧 大型应用的话会保持一个数据库连接池的

恩对的我就是这个意思,教程中没有就这个展开来说 估计好多新手都是按照教程来做的 而且mongo 官方示例中已经没有了open操作在获取 collection对象的时候也不是在回调函数里面 var collection = db.collection(‘test_insert’);

回到顶部