I MongoDB er $sample
aggregeringspipeline-stadiet vælger tilfældigt det angivne antal dokumenter fra dets input.
Eksempel
Antag, at vi har en samling kaldet employees
med følgende dokumenter:
{ "_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 }
Vi kan bruge $sample
trin for tilfældigt at vælge et specificeret antal dokumenter fra den samling.
Eksempel:
db.employees.aggregate(
[
{
$sample: { size: 3 }
}
]
)
Resultat:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
I dette tilfælde specificerede jeg, at stikprøvestørrelsen er 3. Vi kan se, at tre dokumenter blev returneret i tilfældig rækkefølge.
Her er resultatet, hvis jeg kører den samme kode igen:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Vi får et andet udvalg af dokumenter.
Vi kan øge stikprøvestørrelsen ved at øge antallet.
Eksempel:
db.employees.aggregate(
[
{
$sample: { size: 5 }
}
]
)
Resultat:
{ "_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 }
Returner alle dokumenter tilfældigt
Hvis den ønskede stikprøvestørrelse matcher eller er større end antallet af dokumenter i samlingen, returneres alle dokumenter i tilfældig rækkefølge.
Eksempel:
db.employees.aggregate(
[
{
$sample: { size: 100 }
}
]
)
Resultat:
{ "_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 }
Hvordan $sample
Beregner resultatet
$sample
stage bruger en af to metoder til at frembringe resultatet. Den faktiske anvendte metode afhænger af scenariet.
Følgende tabel viser, hvilken metode der bruges til hvert scenarie.
Scenarie | Metoden brugt til at frembringe resultaterne |
---|---|
Alle følgende betingelser er opfyldt: – $sample er den første fase af rørledningen – Den angivne stikprøvestørrelse er mindre end 5 % af de samlede dokumenter i samlingen – Samlingen indeholder mere end 100 dokumenter | $sample bruger en pseudo-tilfældig markør til at vælge dokumenter. |
Alle ovenstående betingelser er ikke mødt. | $sample udfører en samlingsscanning efterfulgt af en tilfældig sortering for at vælge det angivne antal dokumenter. |
Duplikater
MongoDB-dokumentationen advarer om, at $sample
kan udskrive det samme dokument mere end én gang i sit resultatsæt.