10

我只是在学习 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)

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

但是如果先建立一个新的服务器连接,它就可以工作。

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

所以我的问题是为什么有 2 个连接函数,一个用于服务器,一个用于 Db,而它们似乎必须始终一起使用?

为什么不这样。

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

我想创建自己的函数来执行此操作,但我想知道它们是分开的是否还有其他原因。

谢谢。

4

3 回答 3

3

对于它的价值,您可以通过 using 来做您想做的事情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");
于 2012-08-23T01:42:44.510 回答
3

这是 mongo 文档上解决方案的链接,供参考。(似乎与其他海报提到的相同解决方案)

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

将与 mongo 服务器的连接和 DB 分开的目的是在您想要连接到 ReplSet 服务器或其他自定义参数的情况下。这样,您就有了一个连接到 mongodb 服务器的单独进程。

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

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

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

var mongo = require('mongoskin');
var db = mongo.db('localhost:27017/testDB');
于 2012-08-29T15:38:02.670 回答
1

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

于 2012-08-15T14:17:27.100 回答