node.js-保持打开MongoDB数据库连接

在许多使用MongoDB的介绍性示例中,您将看到类似以下的代码:

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

如果MongoDB与其他任何数据库系统一样,则closeclose操作通常在时间上很昂贵。

因此,我的问题是这样的:只需简单地一次执行close,将返回的close值分配给某个全局模块就可以了,模块中具有各种功能的功能可以进行各种与数据库相关的工作(将文档插入集合,更新文档等)。 等),然后在应用程序的其他部分调用它们(从而重新使用该db值),然后在完成应用程序后再执行open\connect

换句话说,一次完成closeclose-并非每次都需要进行一些与数据库相关的操作。 而且,当您实际上已完成所有与数据库相关的工作时,您将继续使用最初的open\connect中返回的db对象,最后将其与close一起使用,直到最后将其丢弃。

显然,由于所有I / O都是异步的,因此在close之前,您需要确保在发出close761之前完成了最后一个数据库操作。 缺少一些东西,因为我是MongoDB的新手。 谢谢!

Lew asked 2019-10-08T13:12:25Z
2个解决方案
46 votes

是的,这是正常现象。 启动您的应用程序,连接到数据库,对数据库进行长时间的操作,如果连接意外中断,则可能重新连接,然后再也不要关闭连接(仅依赖于进程终止时发生的自动关闭) 。

Peter Lyons answered 2019-10-08T13:12:51Z
3 votes

mongodb版本^ 3.1.8

初始化连接作为一个承诺:

const MongoClient = require('mongodb').MongoClient
const uri = 'mongodb://...'
const client = new MongoClient(uri)
const connection = client.connect() // initialized connection

然后,只要您希望对数据库执行操作,就调用该连接:

    // if I want to insert into the database...
    const connect = connection
    connect.then(() => {
        const doc = { id: 3 }
        const db = client.db('database_name')
        const coll = db.collection('collection_name')
        coll.insertOne(doc, (err, result) => {
            if(err) throw err
        })
    })
Henry Bothin answered 2019-10-08T13:13:35Z
translate from https://stackoverflow.com:/questions/18650890/keeping-open-a-mongodb-database-connection