MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $przykład

W MongoDB $sample Etap potoku agregacji losowo wybiera określoną liczbę dokumentów z danych wejściowych.

Przykład

Załóżmy, że mamy kolekcję o nazwie employees z następującymi dokumentami:

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

Możemy użyć $sample etap, aby losowo wybrać określoną liczbę dokumentów z tej kolekcji.

Przykład:

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

Wynik:

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

W tym przypadku określiłem, że wielkość próbki wynosi 3. Widzimy, że trzy dokumenty zostały zwrócone w losowej kolejności.

Oto wynik, jeśli ponownie uruchomię ten sam kod:

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

Otrzymujemy inny wybór dokumentów.

Możemy zwiększyć rozmiar próbki, zwiększając liczbę.

Przykład:

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

Wynik:

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

Losowo zwróć wszystkie dokumenty

Jeśli żądany rozmiar próbki jest zgodny lub większy niż liczba dokumentów w kolekcji, wszystkie dokumenty są zwracane w losowej kolejności.

Przykład:

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

Wynik:

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

Jak $sample Oblicza wynik

$sample stage wykorzystuje jedną z dwóch metod do uzyskania wyniku. Faktyczna zastosowana metoda zależy od scenariusza.

Poniższa tabela przedstawia metodę używaną w każdym scenariuszu.

Scenariusz Metoda użyta do uzyskania wyników
Wszystkie poniższe warunki są spełnione:
$sample to pierwszy etap rurociągu
– Podana wielkość próbki to mniej niż 5% wszystkich dokumentów w kolekcji
– Zbiór zawiera ponad 100 dokumentów
$sample używa pseudolosowego kursora do wybierania dokumentów.
Wszystkie powyższe warunki nie spełnione. $sample wykonuje skanowanie kolekcji, a następnie losowe sortowanie w celu wybrania określonej liczby dokumentów.

Duplikaty

Dokumentacja MongoDB ostrzega, że ​​$sample może wyświetlić ten sam dokument więcej niż raz w zestawie wyników.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 3 sposoby na wybranie wiersza z maksymalną wartością w SQL

  2. MongoDB $strLenCP

  3. Jak zastosować aktualizację za pomocą filtrowanego operatora pozycyjnego z arrayFilters

  4. Zakres paginacji MongoDB

  5. Bazy danych dokumentów:nadmiarowe dane, referencje itp. (w szczególności MongoDB)