V MongoDB, $sample
fáze agregačního kanálu náhodně vybere zadaný počet dokumentů ze svého vstupu.
Příklad
Předpokládejme, že máme kolekci nazvanou employees
s následujícími dokumenty:
{ "_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 }
Můžeme použít $sample
fázi pro náhodný výběr určitého počtu dokumentů z této kolekce.
Příklad:
db.employees.aggregate(
[
{
$sample: { size: 3 }
}
]
)
Výsledek:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
V tomto případě jsem uvedl, že velikost vzorku je 3. Vidíme, že tři dokumenty byly vráceny v náhodném pořadí.
Zde je výsledek, když znovu spustím stejný kód:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Získáváme jiný výběr dokumentů.
Velikost vzorku můžeme zvětšit zvýšením čísla.
Příklad:
db.employees.aggregate(
[
{
$sample: { size: 5 }
}
]
)
Výsledek:
{ "_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 }
Náhodně vrátit všechny dokumenty
Pokud se požadovaná velikost vzorku shoduje nebo je větší než počet dokumentů ve sbírce, budou všechny dokumenty vráceny v náhodném pořadí.
Příklad:
db.employees.aggregate(
[
{
$sample: { size: 100 }
}
]
)
Výsledek:
{ "_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
Vypočítá výsledek
$sample
fáze používá k vytvoření výsledku jednu ze dvou metod. Skutečná použitá metoda závisí na scénáři.
Následující tabulka uvádí, která metoda se používá pro jednotlivé scénáře.
Scénář | Metoda použitá k získání výsledků |
---|---|
Jsou splněny všechny následující podmínky: – $sample je první etapou plynovodu – Uvedená velikost vzorku je menší než 5 % z celkového počtu dokumentů ve sbírce – Sbírka obsahuje více než 100 dokumentů | $sample používá k výběru dokumentů pseudonáhodný kurzor. |
Všechny výše uvedené podmínky neplatí splněno. | $sample provede skenování kolekce následované náhodným řazením, aby se vybral zadaný počet dokumentů. |
Duplikáty
Dokumentace MongoDB varuje, že $sample
může vytisknout stejný dokument více než jednou ve své výsledné sadě.