Tôi có một bộ sưu tập mongo với tài liệu. Có một trường trong mọi tài liệu là 0 HOẶC 1. Tôi cần lấy mẫu ngẫu nhiên 1000 bản ghi từ cơ sở dữ liệu và đếm số lượng tài liệu có trường đó là 1. Tôi cần thực hiện lấy mẫu này 1000 lần. Tôi phải làm nó như thế nào ?Lấy mẫu ngẫu nhiên từ Mongo
Trả lời
Dưới đây là một ví dụ trong vỏ mongo
.. giả một bộ sưu tập của collname
, và một giá trị quan tâm trong thefield
:
var total = db.collname.count();
var count = 0;
var numSamples = 1000;
for (i = 0; i < numSamples; i++) {
var random = Math.floor(Math.random()*total);
var doc = db.collname.find().skip(random).limit(1).next();
if (doc.thefield) {
count += (doc.thefield == 1);
}
}
Điều này cũng trả lời một câu hỏi khác: không giống như SQL, MongoDB không có chức năng dựng sẵn cho điều này thực sự.Ngoài ra, bỏ qua có thể (... có thể) trở nên rắc rối cho các giá trị ngẫu nhiên lớn hơn, mặc dù phụ thuộc. – Sammaye
tôi sẽ chỉnh sửa nhận xét của tôi về @Stennies trả lời với điều này, nhưng bạn cũng có thể sử dụng một chỉ số ID tăng tự động seprate ở đây như là một thay thế nếu bạn đã bỏ qua số lượng HUGE của hồ sơ (nói chuyện rất lớn ở đây).
tôi đã viết câu trả lời khác cho câu hỏi khác rất nhiều như thế này, nơi một số một đã cố gắng để tìm kỷ lục thứ n của bộ sưu tập:
php mongodb find nth entry in collection
Phần thứ hai của câu trả lời của tôi về cơ bản mô tả một phương pháp tiềm năng bằng cách mà bạn có thể tiếp cận vấn đề này. Bạn sẽ vẫn cần phải lặp 1000 lần để có được hàng ngẫu nhiên của khóa học.
Đối với MongoDB 3.0 và trước đó, tôi sử dụng một mẹo cũ từ các ngày SQL (mà tôi nghĩ Wikipedia sử dụng cho tính năng trang ngẫu nhiên của chúng). Tôi lưu trữ một số ngẫu nhiên giữa 0 và 1 trong mỗi đối tượng tôi cần phải ngẫu nhiên, hãy gọi trường đó là "r". Sau đó bạn thêm chỉ mục vào "r".
db.coll.ensureIndex(r: 1);
Bây giờ để có được đối tượng x ngẫu nhiên, bạn sử dụng:
var startVal = Math.random();
db.coll.find({r: {$gt: startVal}}).sort({r: 1}).limit(x);
này mang đến cho bạn đối tượng ngẫu nhiên trong một truy vấn tìm duy nhất. Tùy thuộc vào nhu cầu của bạn, điều này có thể là quá mức cần thiết, nhưng nếu bạn định làm nhiều mẫu theo thời gian, đây là một cách rất hiệu quả mà không cần tải phụ trợ của bạn.
Tuyệt vời! Rất thông minh! –
giải pháp thanh lịch! –
Nếu bạn đang sử dụng mongoengine, bạn có thể sử dụng một SequenceField để tạo ra một bộ đếm gia tăng.
class User(db.DynamicDocument):
counter = db.SequenceField(collection_name="user.counters")
Sau đó, để lấy một danh sách ngẫu nhiên nói 100, làm như sau
def get_random_users(number_requested):
users_to_fetch = random.sample(range(1, User.objects.count() + 1), min(number_requested, User.objects.count()))
return User.objects(counter__in=users_to_fetch)
nơi bạn sẽ gọi
get_random_users(100)
Đối với những người đến câu trả lời, bây giờ bạn nên sử dụng chức năng tổng hợp mới $sample
, mới trong 3.2.
https://docs.mongodb.org/manual/reference/operator/aggregation/sample/
db.collection_of_things.aggregate(
[ { $sample: { size: 15 } } ]
)
Sau đó thêm bước nữa để đếm lên 0
s và 1
s sử dụng $group
để lấy số liệu. Here is an example from the MongoDB docs.
- 1. Lấy phần tử ngẫu nhiên từ hashset?
- 2. lấy mẫu ngẫu nhiên dựa trên các nhóm
- 3. Mẫu ngẫu nhiên từ phân phối riêng biệt bivariate
- 4. Cách lấy giá trị ngẫu nhiên trong từ điển python
- 5. Lấy x phần tử ngẫu nhiên từ một mảng
- 6. Android: Lấy số ngẫu nhiên từ phương thức JNI
- 7. Cách lấy số ngẫu nhiên trong JSTL?
- 8. cột ngẫu nhiên lấy trong cassandra
- 9. số ngẫu nhiên không quá ngẫu nhiên
- 10. Tại sao không ngẫu nhiên() ngẫu nhiên?
- 11. Cách lấy các giá trị Ngẫu nhiên cho LogicalTypes
- 12. Trình tạo số ngẫu nhiên phân phối ngẫu nhiên
- 13. Số ngẫu nhiên từ hạt giống
- 14. Trình tạo từ ngẫu nhiên- Python
- 15. MySQL vs PHP khi lấy một mục ngẫu nhiên
- 16. Lấy mẫu ngẫu nhiên một tỷ lệ phần trăm các hàng trong một khung dữ liệu
- 17. lấy mẫu ngẫu nhiên của chuỗi con không chồng chéo có độ dài k
- 18. ngẫu nhiên lấy mẫu tập con độc đáo của một mảng
- 19. Hibernate Tiêu chuẩn API: lấy n hàng ngẫu nhiên
- 20. mẫu thống nhất một cách ngẫu nhiên từ một đơn vị n-chiều simplex
- 21. chọn tệp ngẫu nhiên từ thư mục
- 22. Chọn hàng ngẫu nhiên từ bảng mysql
- 23. Số ngẫu nhiên từ Biểu đồ
- 24. yếu tố ngẫu nhiên từ mảng chuỗi
- 25. Hàng ngẫu nhiên từ LINQ đến Sql
- 26. Giá trị ngẫu nhiên từ Flags enum
- 27. Chọn quả ngẫu nhiên từ MySQL
- 28. Tạo các từ ngẫu nhiên trong Java?
- 29. Hàng ngẫu nhiên của Oracle từ bảng
- 30. Tôi có thể lấy n phần tử ngẫu nhiên từ một mảng Perl như thế nào?
Bạn có thể chấp nhận câu trả lời không? –
có thể trùng lặp của [Bản ghi ngẫu nhiên từ MongoDB] (http://stackoverflow.com/questions/2824157/random-record-from-mongodb) –
Xin chào Aditya, bạn có thể chấp nhận câu trả lời không? – dalanmiller