MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ mẫu

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ó.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB giới hạn kích thước lưu trữ?

  2. Tối đa và tối thiểu trong mongodb

  3. MongoDB SSL với chứng chỉ tự ký trong Node.js

  4. Chỉ mục trong MongoDB

  5. Truy vấn các phần tử mảng với Mongo