在这么多使用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相关问答推荐

如何处理EPIPE时,使用axios并期待413响应?

nest js控制器方法调用两次

编辑Mongoose中的对象嵌套数组

是否可以在MongoDB中比较和匹配引用文档中的字段

MongooseError[MissingSchemaError]:尚未为模型注册架构

如何使用NodeJS在mongodb中更新文档

为什么 docker 容器内的应用程序无法访问它自己的 API 端点?

如何配置 Nginx React 和 Express

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

一个非常奇怪的JavaScript heap out of memory问题

MongoDB Atlas中的聚合触发器不起作用

在express js模型中将js转换为Typescript 时Typescript 错误

如何在 node.js 环境中从 WebAssembly (Rust) 调用异步 JavaScript 导入函数?

Mongodb v4.0 Transaction, MongoError: Transaction numbers are allowed on a replica set member or mongos

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

如何为 node.js 服务器分配域名?

如何在不全局安装的情况下在 Node REPL 中要求 node 模块?

如何使用 Node.js 在服务器端管理多个 JS 文件

使用 node 的内置调试器判断变量?

react-native run-android 无法识别