Trong MongoDB, $sample
giai đoạn đường ống tổng hợp chọn ngẫu nhiên số lượng tài liệu được chỉ định từ đầu vào của nó.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là employees
với các tài liệu sau:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
Chúng ta có thể sử dụng $sample
để chọn ngẫu nhiên một số lượng tài liệu cụ thể từ bộ sưu tập đó.
Ví dụ:
db.employees.aggregate(
[
{
$sample: { size: 3 }
}
]
)
Kết quả:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
Trong trường hợp này, tôi chỉ định rằng kích thước mẫu là 3. Chúng tôi có thể thấy rằng ba tài liệu đã được trả lại theo thứ tự ngẫu nhiên.
Đây là kết quả nếu khi tôi chạy lại cùng một mã:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Chúng tôi nhận được nhiều lựa chọn tài liệu khác nhau.
Chúng tôi có thể tăng kích thước mẫu bằng cách tăng số lượng.
Ví dụ:
db.employees.aggregate(
[
{
$sample: { size: 5 }
}
]
)
Kết quả:
{ "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Trả lại tất cả tài liệu một cách ngẫu nhiên
Nếu kích thước mẫu được yêu cầu khớp hoặc lớn hơn số lượng tài liệu trong bộ sưu tập, tất cả các tài liệu sẽ được trả về theo thứ tự ngẫu nhiên.
Ví dụ:
db.employees.aggregate(
[
{
$sample: { size: 100 }
}
]
)
Kết quả:
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 }
Cách làm $sample
Tính toán kết quả
$sample
giai đoạn sử dụng một trong hai phương pháp để tạo ra kết quả. Phương pháp thực tế được sử dụng tùy thuộc vào tình huống.
Bảng sau đây phác thảo phương pháp nào được sử dụng cho từng tình huống.
Kịch bản | Phương pháp được sử dụng để tạo ra kết quả |
---|---|
Tất cả các điều kiện sau được đáp ứng: - $sample là giai đoạn đầu tiên của đường ống - Cỡ mẫu quy định nhỏ hơn 5% tổng số tài liệu trong bộ sưu tập - Bộ sưu tập gồm hơn 100 tài liệu | $sample sử dụng con trỏ giả ngẫu nhiên để chọn tài liệu. |
Tất cả các điều kiện trên đều không đã gặp. | $sample thực hiện quét bộ sưu tập, sau đó sắp xếp ngẫu nhiên để chọn số lượng tài liệu được chỉ định. |
Bản sao
Tài liệu MongoDB cảnh báo rằng $sample
có thể xuất cùng một tài liệu nhiều lần trong tập kết quả của nó.