2012-02-16 5 views
1

Мне нужно вытащить несколько случайных документов из коллекции в MongoDB. Я не хочу добавлять новый ключ в свои документы или использовать карту. Какие-либо предложения?MongoDB: сбор нескольких случайных документов из коллекции

+2

см http://stackoverflow.com/questions/2824157/random-record-from-mongodb – Drake

+1

Я тебя слышу! Я не думаю, что параметры уровня приложения очень хороши. К счастью, есть запрос [функция, чтобы получить случайные элементы из коллекции] (https://jira.mongodb.org/browse/SERVER-533) в отслеживателе билетов MongoDB. Если он будет реализован изначально, это, скорее всего, самый эффективный вариант. (Если вы хотите эту функцию, проголосуйте.) –

ответ

2

Вы можете генерировать случайный пропуск в диапазоне от 0 до коллекционных подсчитывать, а затем загружать документы:

db.items.find().skip(randonNumberHere).limit(1); 

Но, такой подход, потому что все меньше и менее эффективным для большой коллекции, потому что каждый раз, когда вы используете пропустить mongodb итерации с первого, чтобы пропустить элемент.

0

Если коллекция не смешно большой ...

all_ids = MyModel.collection.distinct(:_id) 
@my_models = MyModel.find(all_ids.sample(100)) # or .shuffle.take(100) in 1.8.7 
Смежные вопросы