Немного странно в отношении производительности запроса ... Мне нужно запустить запрос, который выполняет общее количество документов, а также может возвращать набор результатов, который может быть ограничен и смещен.
Итак, у меня 57 документов, и пользователь хочет, чтобы 10 документов были компенсированы на 20.
Я могу придумать два способа сделать это: сначала запросить все 57 документов (возвращенных в виде массива), а затем с помощью array.slice вернуть нужные документы. Второй вариант - запустить 2 запроса, первый - с использованием собственного метода «count» mongo, а затем запустить второй запрос с использованием собственных агрегаторов mongo $ limit и $ skip.
Как вы думаете, что лучше масштабируется? Выполнять все это одним запросом или запускать два отдельных запроса?
Редактировать:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
count()
функция по умолчанию в PHP не принимаетlimit
и неskip
учитывает, если только не сказано, поэтому просто выполнение одного запроса лимита и пропуска, а затем получение счетчика должно дать, вероятно, наиболее эффективное решение. Однако как вы узнаете, что существует 57 документов, если вы не выполните два запроса, чтобы подсчитать, что там сейчас? У вас есть статический номер, который никогда не меняется? В противном случае вам нужно будет выполнить как пропуск, так и ограничение, а затем подсчет.