2016-02-05 2 views
2

У меня есть необходимость реализовать подкачку в моей коллекции 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>" 
} 

Это мое требование:

  1. Мне нужно, чтобы получить все документы в категории «abc», однако на страницах 10 документов на странице
  2. Подкачка должна выполняться только после сортировки документов - мне необходимо отсортировать документы по markedDate (по убыванию), затем createdDate (по убыванию)
  3. Предел 10 результатов должен быть b е применяется
  4. я должен быть в состоянии перейти к любой странице на основе количества страниц, которое приходит на входе

Я попытался выполнить следующий запрос для сортировки результатов с помощью агрегата:

db.getCollection('testcollection').aggregate(
    {$match:{"category" : "abc"}}, 
    {$sort:{markedDate: -1, createdDate : -1} 
}) 

Однако, как мне перейти на страницу? Я могу использовать опцию skip + limit, однако я прочитал некоторые сообщения перед публикацией этого вопроса, и это не рекомендуется для больших наборов данных. Я ожидаю, что моя коллекция содержит около 75000 документов.

Кроме того, поскольку моя дата хранится в формате даты ISO, я вижу, что видимость находится только на уровне секунд. У меня может быть создано 2 документа за одну секунду.

Каков наилучший способ опубликовать мои результаты, не вызывая воздействия на производительность?

Просьба сообщить.

ответ

1

Как насчет использования функции сортировки непосредственно

db.testcollection.find({}).sort({createdDate:-1}).skip(1).limit(10) 
+0

Спасибо за ответ. Тем не менее, на каждую документацию Mongo использование пропусков в большой коллекции приводит к ухудшению производительности. Я рассматриваю варианты, чтобы избежать этого. Я рассматриваю варианты, чтобы избежать этого. Какие-нибудь варианты? –

+0

Спасибо за ответ. Однако на каждую документацию Mongo использование пропусков вызывает ухудшение производительности для больших коллекций. –

+0

Это не просто монго в целом, если у вас большая коллекция, и вы хотите, чтобы страницы за пределами 100/10000 были накладными для базы данных, чтобы получить первый предел n skip +, а затем отбросить счетчик пропусков, чтобы показать последний номер предела. –

Смежные вопросы