У меня есть необходимость реализовать подкачку в моей коллекции mongodb
. Это пример документа в моей коллекцииmongo сортировка с разбивкой на страницы
{
"_id" : "<Mongo Generated>",
"category" : "abc",
"createdDate" : "<Date of creation of the document>",
"markedDate" : "<Date when the document is marked
(marking is an activity that is done via my application>"
}
Это мое требование:
- Мне нужно, чтобы получить все документы в категории «
abc
», однако на страницах 10 документов на странице - Подкачка должна выполняться только после сортировки документов - мне необходимо отсортировать документы по
markedDate
(по убыванию), затемcreatedDate
(по убыванию) - Предел 10 результатов должен быть b е применяется
- я должен быть в состоянии перейти к любой странице на основе количества страниц, которое приходит на входе
Я попытался выполнить следующий запрос для сортировки результатов с помощью агрегата:
db.getCollection('testcollection').aggregate(
{$match:{"category" : "abc"}},
{$sort:{markedDate: -1, createdDate : -1}
})
Однако, как мне перейти на страницу? Я могу использовать опцию skip + limit, однако я прочитал некоторые сообщения перед публикацией этого вопроса, и это не рекомендуется для больших наборов данных. Я ожидаю, что моя коллекция содержит около 75000 документов.
Кроме того, поскольку моя дата хранится в формате даты ISO, я вижу, что видимость находится только на уровне секунд. У меня может быть создано 2 документа за одну секунду.
Каков наилучший способ опубликовать мои результаты, не вызывая воздействия на производительность?
Просьба сообщить.
Спасибо за ответ. Тем не менее, на каждую документацию Mongo использование пропусков в большой коллекции приводит к ухудшению производительности. Я рассматриваю варианты, чтобы избежать этого. Я рассматриваю варианты, чтобы избежать этого. Какие-нибудь варианты? –
Спасибо за ответ. Однако на каждую документацию Mongo использование пропусков вызывает ухудшение производительности для больших коллекций. –
Это не просто монго в целом, если у вас большая коллекция, и вы хотите, чтобы страницы за пределами 100/10000 были накладными для базы данных, чтобы получить первый предел n skip +, а затем отбросить счетчик пропусков, чтобы показать последний номер предела. –