为什么有单独的蒙戈.服务器和蒙戈.Db在Mongodb本地驱动程序中

Why is there separate mongo.Server and mongo.Db in mongodb-native driver?

本文关键字:Mongodb 驱动程序 单独 服务器 为什么 Db      更新时间:2023-09-26

我只是在学习nodejs的mongodb原生驱动程序。

我像这样连接。

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

这行得通。但是,如果我尝试使用相同的服务器创建新的数据库连接,则会出现错误。

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

"错误:服务器或 ReplSet 实例无法在多个 Db 实例之间共享"

但是,如果先建立新的服务器连接,则可以正常工作。

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

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

为什么不这样。

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

我想制作自己的函数来做到这一点,但我想知道它们分开是否有其他原因。

谢谢。

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

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

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

数据库

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

另一种解决方案:使用节点蒙哥皮肤

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

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");

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