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.