MongoDB 3.2 đến để giải thoát với $sample
(link to doc)
EDIT: Gần đây nhất của Mongoid đã thực hiện $ mẫu, vì vậy bạn có thể gọi YourCollection.all.sample(5)
Các phiên bản trước của mongoid
Mongoid không hỗ trợ sample
cho đến khi Mongoid 6, vì vậy bạn phải chạy này truy vấn tổng hợp với người lái xe Mongo:
samples = User.collection.aggregate([ { '$sample': { size: 3 } } ])
# call samples.to_a if you want to get the objects in memory
gì bạn có thể làm với điều đó
Tôi tin rằng chức năng sẽ sớm được tiến hành thành Mongoid, nhưng trong thời gian chờ đợi
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)
Nguồn
2016-04-17 15:40:57
Điều này đang được xem xét bởi nhóm MongoDB. Họ ưu tiên các vấn đề dựa trên nhu cầu; vì vậy nếu bạn muốn tính năng này, hãy kiểm tra [Ticket # 533: Nhận ngẫu nhiên (các) mục từ Bộ sưu tập] (https://jira.mongodb.org/browse/SERVER-533), đọc và bỏ phiếu cho phù hợp. –
Vé đã bị đóng và hiện tại có một toán tử '$ sample' cho MongoDB. Dường như không được tích hợp với Mongoid, truy vấn phải được thực hiện thủ công. Bạn cũng có thể muốn có một cái nhìn tại 'snapshot' để thực sự tránh trùng lặp từ concurrency. –