node.js - 如何处理 Node/MongoDB 连接管理?

标签 node.js mongodb

我正在使用 node-mongodb-native 连接到本地 MongoDB 实例。我在思考如何处理连接时遇到了一些困难。我尝试将 MongoDB 的内容抽象到自定义 Database 模块中:

数据库.js

var mongo = require('mongodb'); 
var Database = function() { return this; };

Database.prototype.doStuff = function doStuff(callback) {
    mongo.connect('mongodb://127.0.0.1:27017/testdb', function(err, conn) {
        conn.collection('test', function(err, coll) {
            coll.find({}, function(err, cursor) {
                cursor.toArray(function(err, items) {
                    conn.close();
                    return callback(err, items);
                });
            });
        });
    });
};

// Testing
new Database().doStuff(function(err, items) {
    console.log(err, items);
});

每种方法都需要新的连接吗?看起来它很快就会变得昂贵。我想象也许连接会在构造函数中建立,后续调用将利用现有连接。

下一个问题可能更多是一个设计问题,但考虑到连接设置和拆除可能是昂贵的操作,我正在考虑添加一个对我的应用程序来说是全局的数据库对象,可以利用它来调用数据库。这看起来合理吗?

请注意,上面的代码大致取自 here 。感谢您的帮助。

最佳答案

您不需要为每个方法建立一个新连接 - 您可以打开一次并用于后续调用。这同样适用于各个集合变量 - 您可以缓存对 collection() 的单次调用的结果,这将使您只需要这些回调一次,而将它们留在其他地方。

关于node.js - 如何处理 Node/MongoDB 连接管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092903/

相关文章:

MongoDB 存储和查询价格历史记录

node.js - 如何解决node.js中将数据保存到mongodb的问题?

mongodb - 如何在 Sails 中创建应用程序时覆盖 Mongodb 中的对象 ID

javascript - 为什么我不能用 Mongoose 设置数据库?

javascript - Moment JS fromNow 对 map 中的所有日期返回相同的值 'A Year Ago'

arrays - MongoDB:删除除最后 X 个条目之外的所有数组条目

node.js - 在 Hapijs 中我应该遵循什么文件夹结构?

node.js - 模型相互引用错误 : circular dependencies problem

node.js - 从node.js调用COM模块

node.js - 我的 Nightmare 测试并没有进入我的评估声明