为什么在mongodb-native驱动中有单独的mongo.Server和mongo.Db?

我只是学习nodejs的mongodb本地驱动程序。

我这样连接。

var mongo=require("mongodb") var serv=mongo.Server("localhost", 27017) var dbase=mongo.Db("MyDatabase", serv) 

那是有效的。 但是,如果我尝试使用相同的服务器创build一个新的数据库连接,我得到一个错误。

 var dbase2=mongo.Db("MyDatabase2", serv) 

“错误:服务器或ReplSet实例不能在多个Db实例之间共享”

但是,如果首先build立一个新的服务器连接,它就会起作用

 var serv2=mongo.Server("localhost", 27017) var dbase2=mongo.Db("MyDatabase2", serv2) 

所以我的问题是为什么有2个连接function,一个服务器和一个Db,当他们似乎必须总是一起使用?

为什么不这样呢?

 var dbase=mongo.Db("localhost", 27017, "MyDatabase") 

我想要做我自己的function,但我不知道是否有其他原因,他们是分开的。

谢谢。

这里是一个链接到mongo文档的解决scheme,供参考。 (看起来像提到的另一个海报相同的解决scheme)

http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html#sharing-the-connections-over-multiple-dbs

将连接与mongo服务器分开,然后是DB连接到ReplSet服务器或其他自定义参数的情况。 这样,你有一个单独的进程连接到一个mongodb服务器。

数据库连接调用是单独的,因为你在这里的情况:你不只是想连接到一个mongo服务器和一个单一的数据库,但多个数据库。 连接到数据库和服务器的这种分离允许这种灵活性。

另一个解决scheme:使用节点mongoskin

Mongoskin做你想要的…它允许连接到服务器和数据库在一个命令。 不是mongo-native的解决scheme,但值得考虑作为未来项目的替代库。

 var mongo = require('mongoskin'); var db = mongo.db('localhost:27017/testDB'); 

对于什么是值得的,你可以通过使用Db#db()来做你想做的事情,这似乎没有出现在官方文档中,但是在db.js的源代码中被列为公共API:

 /** * Create a new Db instance sharing the current socket connections. * * @param {String} dbName the name of the database we want to use. * @return {Db} a db instance using the new database. * @api public */ 

所以你可以做

 var serv=mongo.Server("localhost", 27017); var dbase=mongo.Db("MyDatabase", serv); var dbase2=dbase.db("MyDatabase2"); 

因为这是两个独立的行为 – 您必须连接(或已经有连接)到数据库服务器(计算机)才能查询该特定服务器上的任何数据库。 您可以为每个要使用的数据库创build不同的数据库查询连接,但同时您将使用与服务器相同的连接。
大多数情况下,您不希望为每个数据库(如果有多个)创build单独的服务器连接,因为服务器通常会限制连接数。