Подтвердить что ты не робот

Поддерживает ли mongoose несколько запросов к базе данных одновременно?

Я читал, что Mongoose будет открывать только одно соединение максимум на коллекцию, и нет возможности изменить это.

Означает ли это, что медленный запрос mongo заставит все последующие запросы ждать?

Я знаю все в node.js не блокирует, но мне интересно, замедлит ли медленный запрос выполнение всех последующих запросов. И есть ли способ изменить это.

4b9b3361

Ответ 1

Он использует только одно соединение, если вы используете метод по умолчанию, где вы делаете mongoose.connect(). Чтобы обойти это, вы можете создать несколько соединений, а затем привязать модель к одной и той же схеме к этому соединению.

Так же:

var conn = mongoose.createConnection('mongodb://localhost/test');
var conn2 = mongoose.createConnection('mongodb://localhost/test');
var model1 = conn.model('Model', Schema);
var model2 = conn2.model('Model', Schema);
model1.find({long query}, function() {
   console.log("this will print out last");
});
model2.find({short query}, function() {
   console.log("this will print out first");
});

Надеюсь, что это поможет.

Обновление Эй, это действительно работает. Обновляя комментарии, вы можете создать пул соединений, используя createConnection. Он позволяет одновременно выполнять несколько запросов из одной модели:

var conn = mongoose.createConnection('mongodb://localhost/test', {server:{poolSize:2}});
var model = conn.model('Model', Schema);
model.find({long query}, function() {
   console.log("this will print out last");
});
model.find({short query}, function() {
   console.log("this will print out first");
});

Обновление 2 - Декабрь 2012
Этот ответ может быть немного устаревшим сейчас - я заметил, что я продолжаю получать upvotes, поэтому я решил обновить его. У родного драйвера mongodb, который теперь имеет оболочку mongoose, размер пула соединений по умолчанию равен 5, поэтому вам, вероятно, не нужно явно указывать его в mongoose.