MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $sampel

Di MongoDB, $sample tahap pipa agregasi secara acak memilih jumlah dokumen yang ditentukan dari inputnya.

Contoh

Misalkan kita memiliki koleksi yang disebut employees dengan dokumen sebagai berikut:

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

Kita dapat menggunakan $sample tahap untuk secara acak memilih sejumlah dokumen tertentu dari koleksi itu.

Contoh:

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

Hasil:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }

Dalam hal ini saya menentukan bahwa ukuran sampel adalah 3. Kita dapat melihat bahwa tiga dokumen dikembalikan secara acak.

Berikut hasilnya jika saya menjalankan kode yang sama lagi:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }

Kami mendapatkan pilihan dokumen yang berbeda.

Kita dapat meningkatkan ukuran sampel dengan meningkatkan jumlahnya.

Contoh:

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

Hasil:

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

Kembalikan Semua Dokumen Secara Acak

Jika ukuran sampel yang diminta cocok, atau lebih besar dari jumlah dokumen dalam koleksi, semua dokumen dikembalikan secara acak.

Contoh:

db.employees.aggregate(
   [
      { 
        $sample: { size: 100 } 
      }
   ]
)

Hasil:

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

Bagaimana $sample Menghitung Hasil

$sample tahap menggunakan salah satu dari dua metode untuk menghasilkan hasil. Metode aktual yang digunakan tergantung pada skenario.

Tabel berikut menguraikan metode mana yang digunakan untuk setiap skenario.

Skenario Metode yang digunakan untuk menghasilkan hasil
Semua kondisi berikut terpenuhi:
$sample adalah tahap pertama dari pipa
– Ukuran sampel yang ditentukan kurang dari 5% dari total dokumen dalam koleksi
– Koleksinya berisi lebih dari 100 dokumen
$sample menggunakan kursor pseudo-acak untuk memilih dokumen.
Semua ketentuan di atas tidak bertemu. $sample melakukan pemindaian koleksi diikuti dengan pengurutan acak untuk memilih jumlah dokumen yang ditentukan.

Duplikat

Dokumentasi MongoDB memperingatkan bahwa $sample dapat menampilkan dokumen yang sama lebih dari satu kali dalam kumpulan hasil.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengapa error mongod mati tapi subsys terkunci dan tidak cukup ruang kosong untuk file jurnal di Linux?

  2. Menggunakan findOne dalam satu lingkaran membutuhkan waktu terlalu lama di Node.js

  3. MongoDB pilih di mana dalam array _id?

  4. Membuat spring-data-mongodb multi-tenant

  5. 3 Langkah Sederhana untuk Membuat Cluster Sharded MongoDB