MongoDB 3.2 приходит на помощь с $sample
( ссылка на документ )
РЕДАКТИРОВАТЬ : Самый последний из Mongoid реализовал $ sample, так что выможно вызвать YourCollection.all.sample(5)
Предыдущие версии mongoid
Mongoid не поддерживает sample
до Mongoid 6, поэтому вы должны выполнить этот агрегированный запрос с Mongoводитель:
samples = User.collection.aggregate([ { '$sample': { size: 3 } } ])
# call samples.to_a if you want to get the objects in memory
Что вы можете сделать с этим
Я считаю, что функциональность должна скоро появиться в Mongoid, но в то же время
module Utility
module_function
def sample(model, count)
ids = model.collection.aggregate([
{ '$sample': { size: count } }, # Sample from the collection
{ '$project': { _id: 1} } # Keep only ID fields
]).to_a.map(&:values).flatten # Some Ruby magic
model.find(ids)
end
end
Utility.sample(User, 50)