Разбиение на страницы и фильтры Mongoose

Я пытаюсь разбить на страницы с дополнительным параметром фильтра с помощью Mongoose.

Я работаю с нумерацией страниц, делая 2 запроса к базе данных, один для подсчета документов и один для фактического получения данных. Без разбивки на страницы мои фильтры также работают правильно. Мне было интересно, есть ли хороший способ вернуть из базы данных как количество документов, так и страницу (подмножество, которое будет отображаться для текущей страницы) данных? Как я могу настроить запрос для этого?

В настоящее время я делаю два отдельных вызова:

Model.find(filter, selectPaths, {limit: limit, skip: skip}, callback);
Model.count(filter, another_callback);

Мне просто нужно сделать два звонка, чтобы получить все необходимые мне данные?


person Bryan Cheng    schedule 04.09.2012    source источник


Ответы (1)


Я возьму на себя смелость и дам ссылку на другие мои ответы: нумерация страниц и разбиение на страницы с помощью mongodb и node.js.

Краткий ответ: не используйте пропуск/лимит, если только ваши наборы данных не малы (например, ‹ 1000 документов или около того). Чем большую страницу вы извлекаете, тем хуже она будет работать. Используйте диапазонные запросы (field: {$gt: value}), они намного эффективнее (если индексируются, конечно).

И нет, вы не можете вернуть общее количество и часть данных одним запросом.

person Sergio Tulentsev    schedule 04.09.2012
comment
Насколько эффективно использование пропуска и лимита для разбиения на страницы? Для какого объема данных пропуск будет работать без проблем? Я читал сообщения в блогах, в которых говорится, что для больших наборов данных следует использовать разбиение на страницы на основе диапазона, но сколько стоят большие наборы данных? - person shrawan_lakhe; 25.02.2016
comment
Вы по ссылкам в ответе ходили? В этом посте даже есть номер. - person Sergio Tulentsev; 25.02.2016