我是使用mongoose
的新手,想知道mongoose.connect()
和mongoose.createConnection()
之间的根本区别是什么,特别是一般情况下,当使用另一个时要考虑的事项是什么
我对官方文档的理解是,通常只使用一个连接mongoose.connect()
,而如果使用了多个连接实例mongoose.createConnection()
。
希望有人能够澄清更多相关信息。
另外,如果我的理解是正确的,那么在单一连接中使用mongoose.createConnection()
有什么缺点?为什么我们不建议每个案例使用mongoose.createConnection()
来标准化连接?
答案 0 :(得分:9)
我对官方文档的理解是,通常只有一个连接使用mongoose.connect(),而如果有多个连接实例,则使用mongoose.createConnection()。
是的。确切地说,.connect()
实际上会创建一个套接字/连接池(在连接设置中的poolSize
中定义,默认值为5),它保持打开状态,因此实际上有多个连接,但是在一个连接中池。
话虽如此,如果您想要具有不同属性的多个连接池,则应使用createConnection
此外,如果我的理解正确的话, 在单连接中使用mongoose.createConnection()?为什么不是 建议我们对每种情况使用mongoose.createConnection() 标准化连接?
这是一个很好的问题,docs中也已经有一个答案:
当您调用mongoose.connect()时,Mongoose将创建一个默认连接。您可以使用mongoose.connection访问默认连接。
基本上.connect
是createConnection
的一组(主要是)最佳实践设置的简写
在大多数简单项目中,您不必担心指定不同的读取或写入设置,池大小,到不同副本服务器的单独连接等,这就是.connect
存在的原因。
但是,如果您有更高的要求(例如,出于法律或性能方面的原因),则可能必须使用createConnection
。
几周前,我遇到了一种情况,我的一个(内部)统计数据包需要零星的数据库访问,但负载很大。由于我不想将db / mongoose对象传递给包以使其尽可能保持模块化,因此我创建了一个新连接。这非常有效,因为我只需要访问我在程序包中定义的某个模型,而无需访问在我的“父”程序包中定义的模型。由于新软件包仅需要读取访问权限,并且可以从其他从属/副本数据库中读取数据,从而减轻了主软件包的负担,因此我在两端切换到createConnection,以将连接与主软件包分开。
对我来说,在同一问题中创建多个连接的最大缺点是,如果它们是在“不同”连接中定义的,则无法通过mongoose.model
直接访问模型。该答案详细说明了该问题:https://stackoverflow.com/a/22838614/2856218