Node.js MongoDB连接字符串中的数据库

Node.js MongoDB连接字符串中的数据库,node.js,mongodb,Node.js,Mongodb,在MongoDB Nodejs驱动程序中,我发现连接URI可能有些混乱 一方面,在描述URI()的页面中,它表示path参数是“身份验证数据库” 另一方面,在许多官方示例()中,它们似乎使用path参数作为要使用的活动数据库(它们直接调用db.collection(),而不调用.database()) 我遗漏了什么吗?TL;DR: 连接后立即调用db.collection(),仅适用于低于3.0版本的驱动程序 详细信息: 首先,您看到的官方示例来自MongoDB驱动程序,版本为1.4.9,驱动程

在MongoDB Nodejs驱动程序中,我发现连接URI可能有些混乱

一方面,在描述URI()的页面中,它表示path参数是“身份验证数据库”

另一方面,在许多官方示例()中,它们似乎使用path参数作为要使用的活动数据库(它们直接调用
db.collection()
,而不调用
.database()


我遗漏了什么吗?

TL;DR:
连接后立即调用
db.collection()
,仅适用于低于3.0版本的驱动程序

详细信息:
首先,您看到的官方示例来自MongoDB驱动程序,版本为
1.4.9
,驱动程序现在的版本为
3.5.8
,我建议您查看最新的文档和示例

为了澄清混淆,连接URI中指定的数据库路径是身份验证数据库,即用于登录的数据库,即使对于1.4.9版本的驱动程序也是如此

但是,您提到的差异的原因是,在某些情况下,连接后能够立即调用
db.collection()
,这是驱动程序版本3中MongoClient类更改的结果-

在版本3之前,
MongoClient.connect
将向其回调函数返回一个实例,此实例将引用连接URI路径中指定的数据库,因此您可以直接调用
db.collection()

MongoClient.connect("<connection_URI>", function(err, db) {
  // db is a DB instance, so I can access my collections straight away:
   db.collection('sample_collection').find();
});

谢谢。那么你调用哪个
close()
on呢?我看到客户端和db都有
close
API。对于版本3(以及更高版本),只有MongoClient类有close方法,所以你只能在客户端实例上调用close。谢谢,我知道这是一个不同的问题,但是()根据您提到的SDK更改,接受的答案是否仍然有效?在服务器生命周期中仅呼叫连接一次,并仅关闭一次?是,该问题的接受答案(在应用生命周期中仅连接一次)考虑到问题的上下文,它仍然有效。不过这是一个架构决策,您的用例应该最终确定它是否对您有效。
MongoClient.connect("<connection_URI>", function(err, client) {
  // client is a MongoClient instance, you would have to call 
  // the Client.db() method to access your database
  const db = client.db('sample_database');
  // Now you can access your collections
  db.collection('sample_collection').find();
});