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

时间:2012-08-15 14:00:59

标签: javascript node.js mongodb node-mongodb-native

我只是在学习nodejs的mongodb-native驱动程序。

我这样连接。

var mongo=require("mongodb")

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

这很有效。但是如果我尝试使用同一个服务器创建一个新的数据库连接,我会收到一个错误。

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

“错误:无法跨多个Db实例共享服务器或ReplSet实例”

但如果首先建立新的服务器连接,它就有效。

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

所以我的问题是为什么有两个连接函数,一个用于Server,一个用于Db,当它们似乎必须一起使用时?

为什么不这样。

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

我想创建自己的功能,但是我想知道是否还有其他原因它们是分开的。

感谢。

3 个答案:

答案 0 :(得分:3)

对于它的价值,您可以使用Db#db()执行您想要执行的操作,db.js似乎没有出现在官方文档中,但在/** * 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 */ 的源代码中列为公共API:

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

所以你可以做到

{{1}}

答案 1 :(得分:3)

以下是mongo文档解决方案的链接,供参考。 (看起来像其他海报提到的解决方案一样)

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

将连接分离到mongo服务器,然后将DB用于连接到ReplSet服务器或其他自定义参数的情况。这样,您就有一个连接到mongodb服务器的独立进程。

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

另一种解决方案:使用node-mongoskin

Mongoskin执行您想要的操作...它允许在一个命令中连接到服务器和数据库。不是mongo-native的解决方案,但值得考虑作为未来项目的替代库。

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

答案 2 :(得分:1)

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