在这么多使用 MongoDB 的介绍性示例中,您会看到如下代码:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db)
{
/* Some operation... CRUD, etc. */
db.close();
});
如果 MongoDB 与任何其他数据库系统一样,open
和 close
操作通常在时间方面是昂贵的。
所以,我的问题是:是否可以简单地执行 MongoClient.connect("...
一次,将返回的 db
值分配给某个模块全局,当应用程序的其他部分调用它们时,模块中的各种函数会执行各种与数据库相关的工作(将文档插入集合、更新文档等)(从而重用该 db
值),然后,当应用程序完成时,才执行 close
。
换句话说,open
和 close
只执行一次 - 不是每次您需要去执行一些与数据库相关的操作时。并且您继续重复使用在初始 open\connect
期间返回的 db
对象,只是在最后使用 close
,当您真正完成所有与数据库相关的工作时。
显然,由于所有 I/O 都是异步的,因此在 close
之前,您需要确保在发出 close
之前完成最后一个数据库操作。看起来这应该没问题,但我想仔细检查以防万一我错过了一些东西,因为我是 MongoDB 的新手。谢谢!
最佳答案
是的,这是很好的典型行为。启动您的应用程序,连接到数据库,长时间对数据库执行操作,如果连接意外断开,则可能重新连接,然后永远不要关闭连接(仅依靠进程终止时发生的自动关闭) .
https://stackoverflow.com/questions/18650890/
相关文章:
MongoDB 通过 Mongoose JS - findByID 是什么?
python - 如何从 pymongo 发出 "show dbs"
mongodb - 在同一数据库中复制集合的最快方法是什么?
sql - MongoDB如何避免SQL注入(inject)困惑?
javascript - 如何使用对象 ID 数组创建 Mongoose 模式?
mongodb - MongoDB stats() 函数是否返回位或字节?
mongodb - 如何在 Mongoose 中查询不同的值?