Node.js MongoDB连接字符串中的数据库
在MongoDB Nodejs驱动程序中,我发现连接URI可能有些混乱 一方面,在描述URI()的页面中,它表示path参数是“身份验证数据库” 另一方面,在许多官方示例()中,它们似乎使用path参数作为要使用的活动数据库(它们直接调用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,驱动程
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();
});