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

MongoDB $ sampleRate

Trong MongoDB, $sampleRate giai đoạn đường ống tổng hợp khớp với một lựa chọn ngẫu nhiên của các tài liệu đầu vào.

Số lượng tài liệu được chọn xấp xỉ với tỷ lệ mẫu được biểu thị bằng phần trăm của tổng số tài liệu.

$sampleRate toán tử đã được giới thiệu trong MongoDB 4.4.2.

Khi bạn sử dụng $sampleRate , bạn cung cấp tỷ lệ mẫu dưới dạng số dấu phẩy động giữa 01 . Quy trình lựa chọn sử dụng phân phối ngẫu nhiên đồng nhất và tỷ lệ mẫu bạn cung cấp thể hiện xác suất một tài liệu nhất định sẽ được chọn khi nó đi qua đường ống.

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(
   [
      { 
        $match: { $sampleRate: 0.33 } 
      }
   ]
)

Kết quả:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Bằng cách cung cấp tỷ lệ mẫu 0.33 , chúng tôi chỉ định rằng khoảng một phần ba tài liệu sẽ được trả lại.

Tuy nhiên, kết quả thực tế có thể khác nhau khá nhiều, tùy thuộc vào số lượng tài liệu có trong bộ sưu tập. Các bộ sưu tập có số lượng tài liệu ít hơn sẽ có kết quả khá đa dạng, trong khi các bộ sưu tập lớn hơn sẽ gần với phân phối ngẫu nhiên đồng nhất như mong đợi.

Để chứng minh điều này, đây là tập hợp kết quả tôi nhận được khi chạy lại cùng một mã:

{ "_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 }

Và một lần nữa:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Và một lần nữa:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Đây là một bộ sưu tập nhỏ hơn, và do đó, kết quả thay đổi khá nhiều.

Nếu bạn yêu cầu trả lại số lượng tài liệu chính xác, hãy sử dụng $sample sân khấu thay thế.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhóm Mongodb và sắp xếp

  2. Xu hướng NoSQL - MongoDB, Cassandra, CouchDB &Riak

  3. Tại sao chúng ta cần, lợi ích gì khi sử dụng mongoose

  4. Làm cách nào để chuyển đổi một trường boolean trong một tài liệu với phép toán nguyên tử?

  5. Làm cách nào để lấy id đối tượng trong PyMongo sau khi chèn?