为什么MongoDB中Mongodb.client.connect().db(dbname)代码可正常运行?
问题解答
核心原因是你对MongoClient.connect()方法的返回值类型认知有误:
- 你使用的MongoDB Node.js驱动(v3及更早版本)中,
MongoClient实例的connect()异步方法返回值本身就是已完成连接初始化的MongoClient实例,和你最初通过new MongoClient()构造出来的Mongodb.client属于同一类的实例,天然就携带db()方法。 - 你代码中
Mongodb.oper = await Mongodb.client.connect()执行完成后,Mongodb.oper就是可用的MongoClient实例,自然可以直接调用db(dbName)方法获取数据库实例,完全符合API规范,不会抛出错误。
你对文档的理解存在偏差:文档记录的MongoClient.db()方法,指的是所有MongoClient实例都可以调用该方法,而connect()返回的刚好就是MongoClient实例,所以链式调用MongoClient.connect().db()本身是合法写法,只是文档没有单独把这种链式写法列出来而已。
另外你对connectdb函数的执行逻辑判断是正确的:
- 首次调用时
Mongodb.oper为空,会先执行连接逻辑给Mongodb.oper赋值,再递归调用一次connectdb完成数据库实例的赋值,总共会执行两次函数。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

