Почему есть отдельный mongo.Server и mongo.Db в mongodb-native driver?

Я просто изучаю собственный драйвер mongodb для nodejs.

Я подключаюсь так.

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)

Итак, мой вопрос в том, почему есть две функции соединения: одна для Сервера и одна для Db, когда кажется, что они всегда должны использоваться вместе?

Почему это не так.

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

Я хочу сделать свою собственную функцию, которая делает это, но мне интересно, есть ли другая причина, по которой они являются отдельными.

Спасибо.

Ответ 1

Вот ссылка на решение в документах mongo для справки. (похоже на то же самое решение, о котором говорил другой плакат)

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

Точка разделения соединения с сервером mongo, а затем DB предназначена для случаев, например, когда вы хотите подключиться к серверу ReplSet или другим настраиваемым параметрам. Таким образом, у вас есть отдельный процесс подключения к серверу mongodb.

Вызов соединения с базой данных разделен просто из-за того, что вы здесь: вы просто не хотите подключаться к серверу mongo и одному db, но несколько dbs. Такое разделение соединения с db и сервером позволяет эту гибкость.

Другое решение: используйте node -mongoskin

Mongoskin делает то, что вы хотите... он позволяет подключаться к серверу и db в одной команде. Не решение для mongo-native, но стоит рассматривать как альтернативную библиотеку для ваших будущих проектов.

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

Ответ 2

Для чего вы можете сделать то, что хотите, используя 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");

Ответ 3

Поскольку это два отдельных и отдельных действия - вам нужно подключиться (или уже иметь соединение) с сервером БД (компьютером), чтобы запросить любую из баз данных на этом конкретном сервере. Вы можете создавать отдельные подключения к базе данных для каждой из баз данных, которые вы хотите использовать, но в то же время вы будете использовать одно и то же соединение с сервером.
Большую часть времени вы НЕ хотите создавать отдельное соединение с сервером для каждой из баз данных (если их много), поскольку сервер обычно ограничивает количество подключений.