在这么多使用MongoDB的介绍性示例中,您可以看到如下代码:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db)
{
    /* Some operation... CRUD, etc. */
    db.close();
});

如果MongoDB和其他任何数据库系统一样,那么openclose操作在时间上通常是昂贵的.

所以,我的问题是:当应用程序的其他部分调用它们时(并因此重用该db值),只需执行一次MongoClient.connect("...,将返回的db值分配给某个全局模块,让模块中的各种函数执行各种与数据库相关的工作(将文档插入集合、更新文档等),就可以了吗,然后,当应用程序完成时,才执行close.

换句话说,openclose只执行一次,而不是每次需要执行与数据库相关的操作时.你继续使用最初open\connect年返回的db对象,直到最后用close处理掉它,当你真正完成所有与数据库相关的工作时.

显然,由于所有的I/O都是异步的,所以在发出close之前,您应该确保最后一个数据库操作已经完成.看起来这应该没问题,但我想再次判断一下,以防因为我是MongoDB的新手而遗漏了什么.谢谢

推荐答案

是的,这是很好的典型行为.启动你的应用程序,连接到数据库,对数据库进行长时间的操作,如果连接意外断开,可能会重新连接,然后永远不要关闭连接(只需依靠进程断开时发生的自动关闭).

Node.js相关问答推荐

如何使用多个OR参数从多个集合聚合

如果非SQL函数在事务内部运行失败,PG-Promise事务会回滚吗?

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

合并Shift对象数组以创建最终的排班表

Solidity 将数据位置从内存更改为存储

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

表达限制资源属于特定用户的优雅方式

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

为什么需要在 NodeJS 应用程序中创建服务器?

如果 express.js (node.js) http 请求在完成之前关闭会发生什么?

users.watch(在 gmail google api 中)如何收听通知?

在安装 tensorflow 时遇到问题

为什么 req.params.id 返回 undefined未定义?

如何在 NodeJS 中获取操作系统用户名?

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

在多个文件 node.js 之间共享和修改变量

在 Node.js 与 Cron 作业(job)中设置间隔?

create-react-app,安装错误(找不到命令)

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

Node.js 中的 PHP exit()/die() 类似功能是什么