sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $ukázka

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ě.


  1. Operátoři agregace MongoDB pro díly s datem vrácení

  2. Jak mohu číst z Redis uvnitř MULTI bloku v Ruby?

  3. Jak implementovat server push v rámci Flask?

  4. Úvod do základů MongoDB zóny