Я пишу веб-приложение с Node.js и мангуст. Как я могу разбить на страницы результаты, которые я получаю от .find()
звонка? Я хотел бы функциональность, сравнимую с "LIMIT 50,100"
SQL.
mongodb
node.js
pagination
mongoose
Томас
источник
источник
Ответы:
Я очень разочарован принятыми ответами на этот вопрос. Это не будет масштабироваться. Если вы читаете мелкий шрифт на cursor.skip ():
Чтобы добиться масштабируемости нумерации страниц, объедините limit () и хотя бы один критерий фильтра. Дата createOn подходит для многих целей.
источник
-createdOn
', вы бы заменили значениеrequest.createdOnBefore
на наименьшее значение,createdOn
возвращенное в предыдущем наборе результатов, а затем запрос.После более пристального взгляда на API Mongoose с информацией, предоставленной Родольфом, я нашел это решение:
источник
Пагинация с использованием мангуста, экспресса и нефрита - вот ссылка на мой блог с более подробной информацией
источник
Math.max(0, undefined)
вернетсяundefined
, это сработало для меня:let limit = Math.abs(req.query.limit) || 10;
let page = (Math.abs(req.query.page) || 1) - 1;
Schema.find().limit(limit).skip(limit * page)
Вы можете цепочкой просто так:
Выполните запрос, используя
exec
источник
var page = req.param('p'); var per_page = 10; if (page == null) { page = 0; } Location.count({}, function(err, count) { Location.find({}).skip(page*per_page).limit(per_page).execFind(function(err, locations) { res.render('index', { locations: locations }); }); });
В этом случае вы можете добавить запрос
page
и / илиlimit
ваш URL в виде строки запроса.Например:
?page=0&limit=25 // this would be added onto your URL: http:localhost:5000?page=0&limit=25
Поскольку это было бы
String
нам, нам нужно преобразовать его в aNumber
для наших расчетов. Давайте сделаем это, используяparseInt
метод, и давайте также предоставим некоторые значения по умолчанию.Кстати, нумерация страниц начинается с
0
источник
mongoose
.Вы можете использовать небольшую упаковку под названием Mongoose Paginate, которая делает его проще.
После в ваших маршрутах или контроллере, просто добавьте:
источник
Это пример, который вы можете попробовать,
источник
Попробуйте использовать функцию мангуста для нумерации страниц. Лимит - это количество записей на странице и номер страницы.
источник
Это то, что я сделал на коде
Вот как я это сделал.
источник
count()
устарела. использованиеcountDocuments()
Запрос;
search = productName,
Params;
страница = 1
источник
Вот версия, которую я прилагаю ко всем моим моделям. Это зависит от подчеркивания для удобства и асинхронности для производительности. Опции позволяют выбирать и сортировать поля с использованием синтаксиса мангуста.
Прикрепите его к схеме вашей модели.
источник
Простое и мощное решение для нумерации страниц
last_doc_id
: последний идентификатор документа, который вы получаетеno_of_docs_required
: количество документов, которые вы хотите получить, т.е. 5, 10, 50 и т. д.last_doc_id
метод, то получите 5 последних документовlast_doc_id
вы получите следующие 5 документов.источник
Над ответом остается в силе.
источник
Вы также можете использовать следующую строку кода
этот код будет работать в последней версии Монго
источник
Надежный подход для реализации этого заключается в передаче значений из внешнего интерфейса с помощью строки запроса . Допустим, мы хотим получить страницу № 2, а также ограничить вывод 25 результатами .
Строка запроса будет выглядеть так:
?page=2&limit=25 // this would be added onto your URL: http:localhost:5000?page=2&limit=25
Давайте посмотрим код:
Я бы предложил реализовать эту логику в промежуточном программном обеспечении, чтобы вы могли использовать ее для различных маршрутов / контроллеров.
источник
Самый простой и быстрый способ - разбить на страницы с помощью примера objectId;
Начальная нагрузка
Возьмите первый и последний ObjectId из данных ответа
Страница следующего условия
Страница следующего условия
В мангусте
источник
Наилучший подход (IMO) - использовать пропуск и ограничение НО в пределах ограниченных коллекций или документов.
Чтобы сделать запрос в ограниченных документах, мы можем использовать определенный индекс, такой как индекс в поле типа DATE. Смотрите ниже
источник
Самый простой плагин для нумерации страниц.
https://www.npmjs.com/package/mongoose-paginate-v2
Добавьте плагин в схему, а затем используйте метод paginate модели:
источник
Это примерная функция для получения результата модели навыков с опциями пагинации и ограничения
}
источник
Вы можете написать запрос, как это.
страница: номер страницы, поступающей от клиента в качестве параметров запроса.
per_page: на странице нет результатов
Если вы используете стек MEAN, следующий пост в блоге предоставляет большую часть информации для создания нумерации страниц во внешнем интерфейсе, используя загрузку с угловым пользовательским интерфейсом и использование мангуста пропуска и ограничения в серверной части.
см .: https://techpituwa.wordpress.com/2015/06/06/mean-js-pagination-with-angular-ui-bootstrap/
источник
Вы можете использовать skip () и limit (), но это очень неэффективно. Лучшим решением будет сортировка по индексируемому полю плюс limit (). Мы в Wunderflats опубликовали небольшую библиотеку здесь: https://github.com/wunderflats/goosepage Он использует первый способ.
источник
Если вы используете mongoose в качестве источника для успокоительного API, взгляните на ' restify-mongoose ' и его запросы. Он имеет именно эту встроенную функциональность.
Любой запрос к коллекции предоставляет полезные заголовки
Таким образом, вы получаете общий сервер с относительно линейным временем загрузки для запросов к коллекциям. Это потрясающе и на что-то посмотреть, если вы хотите заняться собственной реализацией.
источник
источник
источник
Используйте этот простой плагин.
https://github.com/WebGangster/mongoose-paginate-v2
Монтаж
источник
в соответствии с
ответ:
источник
Использование ts-mongoose-pagination
источник
источник
Также удалось достичь результатов с помощью async / await.
Пример кода ниже с использованием асинхронного обработчика с hapi v17 и mongoose v5
источник