我只是在学习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")
我想创建自己的功能,但是我想知道是否还有其他原因它们是分开的。
感谢。
答案 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文档解决方案的链接,供参考。 (看起来像其他海报提到的解决方案一样)
将连接分离到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服务器(计算机)才能查询该特定服务器上的任何数据库。您可以为要使用的每个数据库创建不同的数据库查询连接,但同时您将使用与服务器相同的连接。
大多数情况下,您不希望为每个数据库创建单独的服务器连接(如果有很多),因为服务器通常会限制连接数。