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

标签 javascript node.js mongodb

我正在尝试使用 MongoJS作为 Node.js 中原生 Mongo 驱动程序的包装器。我正在使用 populate()save() 等方法将集合中的文档建模为 JavaScript 类。

在 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();
    });
};

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

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

最佳答案

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

关于javascript - 使用 MongoJS 管理与 Mongo 的连接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10215876/

相关文章:

javascript - Node.js 执行 .lnc 文件

MongoDB db.getCollection.find 和db.tablename.find 的区别?

MongoDB 过滤器(如果所有键都作为字段存在)

javascript - 为什么我得到的是未定义的而不是选定的值?

sql - GraphQL 和 SQL - 是否可以通过 1 个 SQL JOIN 减少数据库调用?

javascript - 使用 Mongoose 更新包含唯一值的对象数组

javascript - 使用 require 时的点斜线和目录级别

arrays - 查询 MongoDB 中的整个对象数组

javascript - onclick ("open()") 事件后 html 页面消失

javascript - 如何覆盖 Angular 的号码过滤器?