Как сделать мой запрос MongoDB более эффективным? - PullRequest
0 голосов
/ 29 июня 2011

Прямо сейчас я делаю 2 шага. Я хочу устранить одного из них.

//Get total results, before the limit. I need this number for pagination reasons.
total_rooms = db.rooms.find({'name':'big'}).count();

//Get the actual results
rooms = db.rooms.find({'name':'big'}).skip(start).limit(num)

Я делаю двойные запросы по всему сайту и чувствую себя по-настоящему глупо. Mysql требует только от меня сделать один запрос, и дает мне total_results.

1 Ответ

1 голос
/ 29 июня 2011

Вам нужен только один запрос.Попробуйте это в оболочке:

for(var i = 0; i < 1000; i++) db.test.save({a:i})
cursor = db.test.find().skip(10).limit(10)

Теперь вы можете получить общий размер набора результатов:

cursor.count()
1000

И размер набора результатов с учетом пропуска и ограничения:

cursor.count(true)
10

Обратите внимание, что сервер выполнит всю работу, необходимую для определения обоих чисел, и будет выполнен новый запрос подсчета, если на сервере доступно больше данных, чем было возвращено с первыми результатами.Другими словами, более чистый код, но не всегда более производительный.

...