I MongoDB, $sample aggregeringspipeline-steget väljer slumpmässigt det angivna antalet dokument från sin inmatning.
Exempel
Anta att vi har en samling som heter employees med följande dokument:
{ "_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 använda $sample steg för att slumpmässigt välja ett visst antal dokument från den samlingen.
Exempel:
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 det här fallet specificerade jag att urvalsstorleken är 3. Vi kan se att tre dokument returnerades i slumpmässig ordning.
Här är resultatet om när jag kör samma kod igen:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 } Vi får ett annat urval av dokument.
Vi kan öka urvalsstorleken genom att öka antalet.
Exempel:
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 } Returnera alla dokument slumpmässigt
Om den begärda urvalsstorleken matchar, eller är större än antalet dokument i samlingen, returneras alla dokument i slumpmässig ordning.
Exempel:
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 } Hur $sample Beräknar resultatet
$sample stage använder en av två metoder för att ta fram resultatet. Den faktiska metoden som används beror på scenariot.
Följande tabell visar vilken metod som används för varje scenario.
| Scenario | Metod som används för att producera resultaten |
|---|---|
| Alla följande villkor är uppfyllda: – $sample är det första steget i pipelinen – Den angivna provstorleken är mindre än 5 % av de totala dokumenten i samlingen – Samlingen innehåller mer än 100 dokument | $sample använder en pseudo-slumpvis markör för att välja dokument. |
| Alla ovanstående villkor är inte träffade. | $sample utför en samlingsskanning följt av en slumpmässig sortering för att välja det angivna antalet dokument. |
Dubbletter
MongoDB-dokumentationen varnar för att $sample kan skriva ut samma dokument mer än en gång i dess resultatuppsättning.