我可以重用 mongodb 中的连接吗?这种连接实际上是如何工作的?

Can I reuse an connection in mongodb? How this connections actually work?

尝试用 mongodb 做一些简单的事情时,我的思绪卡在了对我来说有点奇怪的事情上。

client = MongoClient(connection_string)
db = client.database
    
print(db)
    
client.close()

我认为在建立连接时,在 close() 方法之前的其余代码中只使用这个连接。但它似乎不是那样工作的......我不知道我是如何在它应该是一个连接时最终拥有 9 个连接,即使每个 'request' 都是一个连接也有太多他们

现在这不是什么大问题,只是让我很困扰,因为我不知道它到底是如何工作的!

当您执行 new MongoClient() 时,您并不是只建立一个连接。事实上,您正在创建客户端,它将有一个连接池。当您执行一个或多个请求时,驱动程序会使用池中的可用连接。当使用完成后,连接回到池中。

每次需要与数据库对话时都调用 MongoClient 构造函数是一种非常糟糕的做法,并且会因握手而受到惩罚。使用依赖注入或单例来拥有 MongoClient。

根据 documentation,您应该为每个进程创建一个客户端。

如果是单线程进程,您的代码似乎是正确的方法。如果您不再需要与服务器的连接,您可以通过明确指定数量来限制池大小:

client = MongoClient(host, port, maxPoolSize=<num>).

另一方面,如果代码稍后可能使用相同的连接,最好在开始时简单地创建一次客户端,然后在整个代码中使用它。