MongoDB: извлечение нескольких случайных документов из коллекции - PullRequest
1 голос
/ 16 февраля 2012

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

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

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

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

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

0 голосов
/ 16 февраля 2012

Если коллекция не до смешного большая ...

all_ids = MyModel.collection.distinct(:_id)
@my_models = MyModel.find(all_ids.sample(100)) # or .shuffle.take(100) in 1.8.7
...