Трохи непарний для продуктивності запиту ... Мені потрібно виконати запит, який робить загальну кількість документів, а також може повернути набір результатів, який може бути обмежений та зміщений.
Отже, у мене є 57 документів, і користувач хоче, щоб 10 документів компенсували на 20.
Я можу подумати про 2 способи зробити це, спочатку це запит для всіх 57 документів (повертається як масив), а потім за допомогою array.slice повертає документи, які вони хочуть. Другий варіант - запустити 2 запити, перший із яких використовує рідний метод "count" монго, потім виконати другий запит, використовуючи вбудований $ 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 документів, якщо ви не зробите двох запитів для підрахунку того, що зараз там є? У вас є статичне число, яке ніколи не змінюється? Якщо ні, тоді вам потрібно буде зробити як пропуск, так і ліміт, тоді підрахунок.