2012-04-30 4 views
2

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

Я хотел бы иметь страницу с «бесконечной» прокрутки функциональности и всех результатов, извлекаемых быть отсортированы по определенным признакам. Способ, которым в настоящий момент работает код, он размещает запрос, сортирует результаты и отображает их. Проблема в том, что после того, как пользователь дойдет до нижней части страницы и будет размещен новый запрос, результаты этого запроса будут отсортированы, но в его собственном контексте. То есть, если у вас есть в общей сложности 100 результатов, а первый запрос отображает только 50, то они сортируются. Но следующий запрос (для следующих 50) сортирует результаты только на основе этих 50 результатов, а не на 100 (итоговые результаты).

Итак, нужно ли сразу получить все результаты, отсортировать их, а затем применить к ним некоторую логику разбиения на страницы или есть способ, чтобы MongoDB фактически имел бесконечную прокрутку (запросы AJAX) с сортировкой, применяемой к результатам?

ответ

1

Позвольте мне изложить это, сказав, что у меня нет опыта работы с MongoDB (хотя я знаю, что это база данных NoSQL).

Этот вопрос, однако, является частью общей базы данных (вы, вероятно, получите больше ответов, помечая их как таковые). Я реализовал такую ​​функцию, используя Cassandra (другая, albiet совершенно другая база данных NoSQL), однако применяются те же принципы.

Используйте атрибут sorted-by последней восстановленной записи и выполните поиск по диапазону на основе этого в базе данных. Таким образом, предполагая, что базы данных состоит из следующего набора букв:

A 
B 
C 
D 
E 
F 
G 

..и вы извлечения 2 письма в то время, вы бы получить A, B первым. Когда требуется больше записей, вы должны использовать B для поиска диапазона в наборе букв в базе данных. На простом английском языке это было бы что-то вроде:

Получить буквы, которые появляются после B, ограничить результаты 2

Из краткого обзора учебника MongoDB, похоже, у вас есть conditional operators к помогите вам реализовать это.

2

Существует несколько способов сделать это с помощью MongoDB. Вы можете использовать команды .skip() и .limit() (задокументированные здесь: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-CursorMethods), чтобы применить разбиение на страницы на запрос.

В качестве альтернативы вы можете добавить предложение к вашему запросу: {sorted_field : {$gt : <value from last record>}}. Другими словами, отфильтруйте совпадения запроса, чье сортированное значение меньше, чем у последнего полученного элемента на текущей странице результатов. Например, если страница 1 результатов возвращает документы от A до D, то для получения следующей страницы 2 вы повторяете тот же запрос с дополнительным фильтром .

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