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

3 cách trả lại mẫu tài liệu ngẫu nhiên từ bộ sưu tập MongoDB

Nếu bạn cần trả lại một mẫu nhỏ tài liệu ngẫu nhiên từ một bộ sưu tập, đây là ba cách tiếp cận mà bạn có thể thử sử dụng đường dẫn tổng hợp.

$sample Giai đoạn

$sample giai đoạn đường ống tổng hợp được thiết kế đặc biệt để chọn ngẫu nhiên một số lượng tài liệu cụ thể.

Khi bạn sử dụng $sample , bạn chỉ định số lượng tài liệu bạn muốn trả lại ở kích thước size trường.

Giả sử chúng ta có bộ sưu tập sau được gọi là pets :

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Dog", "weight":10} {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name" :"Scratch", "type":"Cat", "weight":8} {"_id":5, "name":"Bruce", "type":"Bat", "weight":3} {" _id ":6," name ":" Hop "," type ":" Kangaroo "," weight ":130} {" _id ":7," name ":" Punch "," type ":" Gorilla ", "weight":300} {"_id":8, "name":"Snap", "type":"Crocodile", "weight":400} {"_id":9, "name":"Flutter", "type":"Hummingbird", "weight":1} 

Chúng ta có thể sử dụng $sample để lấy một mẫu ngẫu nhiên của những tài liệu như sau:

 db.pets.aggregate ([{$ sample:{size:3}}]) 

Kết quả:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":5, "name":"Bruce", "type" :"Bat", "weight":3} {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} 

Trong trường hợp này, tôi đã chỉ định { size: 3 } đã trả lại ba tài liệu.

Ở đây, nó lại sử dụng một kích thước mẫu khác:

 db.pets.aggregate(
   [
      { 
        $sample: { size: 5 } 
      }
   ]
) 

Kết quả:

 {"_id":6, "name":"Hop", "type":"Kangaroo", "weight":130} {"_id":5, "name":"Bruce", "type" :"Bat", "weight":3} {"_id":8, "name":"Snap", "type":"Crocodile", "weight":400} {"_id":7, "name" :"Punch", "type":"Gorilla", "weight":300} {"_id":4, "name":"Scratch", "type":"Cat", "weight":8}  

$sample giai đoạn hoạt động theo một trong hai cách, tùy thuộc vào số lượng tài liệu có trong bộ sưu tập, kích thước mẫu liên quan đến số lượng tài liệu trong bộ sưu tập và vị trí của nó trong đường dẫn. Xem MongoDB $sample để được giải thích về cách nó hoạt động.

Cũng có thể là $sample giai đoạn có thể trả về cùng một tài liệu nhiều lần trong tập kết quả của nó.

$rand Nhà điều hành

$rand toán tử đã được giới thiệu trong MongoDB 4.4.2 và mục đích của nó là trả về một số thực ngẫu nhiên từ 0 đến 1 mỗi khi nó được gọi.

Do đó, chúng ta có thể sử dụng nó trong $match giai đoạn kết hợp với các toán tử khác, chẳng hạn như $expr$lt để trả lại một mẫu tài liệu ngẫu nhiên.

Ví dụ:

 db.pets.aggregate(
   [
      { 
        $match: 
          { 
            $expr: 
              { 
                $lt: [ 0.5, { $rand: {} } ] 
              }
          } 
      }
   ]
) 

Kết quả:

 {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name":"Scratch", "type" :"Cat", "weight":8} {"_id":6, "name":"Hop", "type":"Kangaroo", "weight":130} {"_id":9, "name" :"Flutter", "type":"Hummingbird", "weight":1} 

Tập kết quả từ phương pháp này khác với $sample cách tiếp cận, trong đó nó không trả về một số lượng tài liệu cố định. Số lượng tài liệu được trả về với cách tiếp cận này có thể khác nhau.

Ví dụ:đây là điều sẽ xảy ra khi tôi chạy cùng một mã nhiều lần nữa.

Kết quả tập 2:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":7, "name":"Punch", "type" :"Gorilla", "weight":300} {"_id":8, "name":"Snap", "type":"Crocodile", "weight":400} 

Kết quả tập 3:

 {"_id":2, "name":"Bark", "type":"Dog", "weight":10} {"_id":4, "name":"Scratch", "type" :"Cat", "weight":8} {"_id":9, "name":"Flutter", "type":"Hummingbird", "weight":1} 

Kết quả tập 4:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":3, "name":"Meo meo", "type" :"Cat", "weight":7} {"_id":6, "name":"Hop", "type":"Kangaroo", "weight":130} {"_id":8, "name" :"Snap", "type":"Crocodile", "weight":400} 

Kết quả tập 5:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":4, "name":"Scratch", "type" :"Cat", "weight":8} {"_id":7, "name":"Punch", "type":"Gorilla", "weight":300} {"_id":8, "name" :"Snap", "type":"Crocodile", "weight":400} {"_id":9, "name":"Flutter", "type":"Hummingbird", "weight":1}  

$sampleRate Nhà điều hành

Được giới thiệu trong MongoDB 4.4.2, $sampleRate toán tử cung cấp một cách ngắn gọn hơn để thực hiện giống như ví dụ trước.

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ụ:

 db.pets.aggregate(
   [
      { 
        $match: { $sampleRate: 0.5 } 
      }
   ]
) 

Kết quả:

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Dog", "weight":10} {"_id":5, "name":"Bruce", "type":"Bat", "weight":3} {"_id":6, "name" :"Hop", "type":"Kangaroo", "weight":130} {"_id":7, "name":"Punch", "type":"Gorilla", "weight":300} {" _id ":8," name ":" Snap "," type ":" Crocodile "," weight ":400} 

Và chạy lại:

 {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":4, "name":"Scratch", "type" :"Cat", "weight":8} {"_id":7, "name":"Punch", "type":"Gorilla", "weight":300} {"_id":8, "name" :"Snap", "type":"Crocodile", "weight":400} {"_id":9, "name":"Flutter", "type":"Hummingbird", "weight":1}  

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

 {"_id":1, "name":"Wag", "type":"Dog", "weight":20} {"_id":2, "name":"Bark", "type" :"Dog", "weight":10} {"_id":3, "name":"Meo meo", "type":"Cat", "weight":7} {"_id":8, "name" :"Snap", "type":"Crocodile", "weight":400} 

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cập nhật một mục trong một mảng nằm trong một mảng

  2. Phân trang theo phạm vi MongoDB

  3. MongoDB $ cos

  4. Chuyển đổi một ngày được lưu trữ mongo trở lại thành mili giây kể từ kỷ nguyên Unix khi được tải?

  5. Cập nhật thuộc tính tài liệu nhúng trong Mongodb