使用MongoJS管理与Mongo的连接的正确方法是什么?

Dux*_*ime 6 javascript mongodb node.js

我正在尝试使用MongoJS作为Node中本机Mongo驱动程序的包装器.我喜欢用模拟方法在我的收藏中的文件,如JavaScript类populate(),save()等等.

在大多数语言中,例如C#和Java,我习惯于为每个查询显式连接然后断开连接.大多数示例仅提供连接示例,但在完成时从不关闭连接.我不确定驱动程序是否能够自行管理或者我是否需要自己手动执行此操作.文档很少.

这是相关的代码:

User.prototype.populate = function(callback) {
    var that = this;    

    this.db = mongo.connect("DuxDB");
    this.db.collection(dbName).findOne({email : that.email}, function(err, doc){
        if(!err && doc) {
            that.firstName  = doc.firstName;
            that.lastName   = doc.lastName;
            that.password   = doc.password;
        }

        if (typeof(callback) === "function"){
            callback.call(that);
        }

        that.db.close();
    });
};
Run Code Online (Sandbox Code Playgroud)

我发现只要close()在MongoJS对象上调用该方法,我就无法在后续调用中打开新连接.但是,如果我不调用此方法,则一旦所有异步调用完成,Node进程永远不会终止,就像它等待与Mongo断开连接一样.

使用MongoJS管理与Mongo的连接的正确方法是什么?

dcr*_*sta 7

如果保持连接处于打开状态而不是断开连接,您的应用程序将获得更好的性能.建立TCP连接,并且在MongoDB的情况下,在适当的情况下发现副本集/分片配置与实际处理查询和更新所花费的时间相比相对昂贵.最好这次"花"一次并保持连接开放而不是不断地重新做这项工作.

  • 说得通.当我不再需要对象时(某种类型的析构函数),是否有适当的时间来关闭连接?或者,当JavaScript垃圾收集对MongoJS对象的引用时,驱动程序会考虑这一点吗?所有调用完成后,不调用close()永远不允许Node进程在控制台中终止. (2认同)

小智 5

不要为每个查询打开+关闭连接.打开连接一次,然后重新使用它.