我试图更好地理解 Connection.prototype.useDb() 方法。如果有人能帮助我,我将不胜感激。
1。 useDb() 的猫鼬文档指出:
使用相同的连接池切换到不同的数据库。
这是否意味着如果连接池中有可用的连接
useDb('db1')
会重用连接?换句话说,useDb('db1')
使用的连接可以被 useDb('db2')
重用吗?
或者该语句只是意味着useDb('db1')
将在连接池中创建一个新连接并且只能重用useDb('db1')
已经创建的连接?
2。 useDb() 的猫鼬文档指出:
[options.useCache=false] «Boolean» 如果为真,则缓存结果,因此多次调用 useDb() 同名只会创建 1 个连接对象。
maxIdleTimeMS
等于0,这意味着没有限制,maxPoolSize等于2)?
3.
考虑:
[options.useCache=false] «Boolean» 如果为真,则缓存结果,因此多次调用 useDb() 同名只会创建 1 个连接对象。
并考虑来自 mongodb.com 的this,其中指出:
MongoDB 是同步的,每个套接字使用一个执行线程,这意味着 MongoDB 将在任何时间点对每个套接字执行一个操作。发送到该套接字的任何其他操作都必须等到当前操作完成。
这是否意味着应该在
mydb2
执行的5个查询,使用来自conn.useDb('mydb2', { useCache: true })
的连接,必须在队列中等待一个接一个地执行?而不是conn.useDb('mydb2', { useCache: false })
,这意味着它们将在单独的连接上并行执行?
编辑 由于 mongoose 使用 Nodejs mongo 驱动程序的 db 方法 来实现其
useDb
方法,并且由于 documentation for db()
方法在 mongo 驱动程序中声明:
创建一个共享当前套接字连接的新 Db 实例。
我想这意味着连接池中的每个连接(套接字)都可以共享,无论它们是通过调用
conn.useDb('mydb1')
还是 conn.useDb('mydb2')
创建的
我进行了某些实验,以便能够通过检查它在某些情况下的行为来理解
useDb
是如何工作的。
似乎如果连接池中有一个可用的连接(套接字)
useDb
将重用连接,换句话说,useDb('db1')
使用/创建的连接,可以被useDb('db2')
重用。
不意味着应该在 mydb2 上执行的 5 个查询,使用来自 conn.useDb('mydb2', { useCache: true }) 的连接,必须在队列中等待一个之后执行另一个。