MongoDB 3.2 viene in soccorso con $sample
(link to doc)
EDIT: Il più recente di Mongoid ha implementato $ campione, in modo da poter chiamare YourCollection.all.sample(5)
versioni precedenti di mongoid
Mongoid non supporta sample
fino Mongoid 6, in modo da avere a eseguire questo query di aggregazione con il driver Mongo:
samples = User.collection.aggregate([ { '$sample': { size: 3 } } ])
# call samples.to_a if you want to get the objects in memory
che cosa si può fare con quel
Credo che il functionnality deve fare la sua strada presto per Mongoid, ma nel frattempo
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)
fonte
2016-04-17 15:40:57
Questo viene considerato dal team MongoDB. Assegnano priorità ai problemi in base alla domanda; quindi se vuoi questa funzione, dai un'occhiata a [Ticket # 533: Get random item (s) from Collection] (https://jira.mongodb.org/browse/SERVER-533), leggi e vota di conseguenza. –
Il ticket è stato chiuso e ora c'è un operatore '$ sample' per MongoDB. Non sembra ancora integrato a Mongoid, la query deve essere eseguita manualmente. Si potrebbe anche voler dare un'occhiata a 'snapshot' per evitare realmente i duplicati dalla concorrenza. –