Если вы просто выполняете запрос, который вы представляете, база данных должна быть достаточно умной, чтобы сделать именно это.
Ваш запрос должен в основном отфильтровать набор кандидатов с использованием индекса time
, а затем просканировать оставшиеся объекты на наличие параметра bid
. Это должно быть намного эффективнее, чем сканирование на клиенте.
Вы обязательно должны запустить explain()
в своем запросе, чтобы узнать, что он делает. Если он использует индекс (BtreeCursor
), а количество проверенных объектов - это просто количество элементов в заданном временном интервале, это нормально. Я не думаю, что есть лучший способ, учитывая ваши ограничения. Выполнение той же операции на клиенте определенно будет медленнее.
Конечно, limit
и небольшой промежуток времени помогут ускорить ваш запрос, но это могут быть внешние факторы. mongostat
может также помочь найти проблему.
Однако, если ваши документы и / или промежутки времени велики, возможно, было бы лучше добавить составной индекс: загрузка большого количества больших документов с диска (так как ваша память уже заполнена) займет некоторое время. Пейджинг индекса с диска также медленный, но данных гораздо меньше.
Хороший ответ можно дать только в эксперименте.