Node.js 将db.open与MongoDB和Nodejs一起使用
我有两个问题 首先,MongoDB文档经常提到使用Node.js 将db.open与MongoDB和Nodejs一起使用,node.js,mongodb,Node.js,Mongodb,我有两个问题 首先,MongoDB文档经常提到使用db.open(),然后使用db.collection(),但我注意到,即使不先调用db.open(),我仍然能够使用api。这样做安全吗?api是否在内部调用db.open() 其次,db对象中是否有一个参数指定是否调用了db.open()?如果没有,我怎样才能知道是否调用了db.open() 原因是我构建了几个与mongo通信的函数,但当其中一些函数相互交互时,我会出现错误,数据库无法多次“打开” 编辑 我在db对象中找到了这个参数。这似乎
db.open()
,然后使用db.collection()
,但我注意到,即使不先调用db.open(),我仍然能够使用api。
这样做安全吗?api是否在内部调用db.open()
其次,db
对象中是否有一个参数指定是否调用了db.open()
?如果没有,我怎样才能知道是否调用了db.open()
原因是我构建了几个与mongo通信的函数,但当其中一些函数相互交互时,我会出现错误,数据库无法多次“打开”
编辑
我在db
对象中找到了这个参数。这似乎是决定db.open()用法的一个布尔值,但我不是100%确定,有人知道吗<代码>db.serverConfig.internalMaster
原因是我构建了几个与mongo通信的函数,但当其中一些函数相互交互时,我会出现错误,数据库无法多次“打开”
您应该重用db对象,而不是多次打开它-对于集合对象也应该这样做,因为创建它们会带来成本。如果您需要知道db对象是否已连接,可以检查db。\u state==“connected”或db.serverConfig.isConnected()
实际上,您最好将一个已知的已连接对象传递给mvc,确保在启动应用程序之前打开db。我使用的是javascript驱动程序,它直接使用db对象的“openCalled”布尔属性。引用它就像
if (!db.openCalled) { //open database }
是的,我熟悉这两种语句,但我的代码是mvc类型的结构。因此,在我实际调用函数的控制器中,它对
db.open()
和db.collection()
一无所知,只知道doThis()
。这就是为什么我想知道一种方法来确定是否调用了db.open()
,这样我就可以正确地嵌套控制器函数了。太好了,谢谢!如果我不调用db.open()
和db.close()
,也可以吗?这种情况会自行发生吗?似乎api仍然可以在不调用db.open()
的情况下工作。