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