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

MongoDB $sampleRate

V MongoDB, $sampleRate fáze agregačního potrubí odpovídá náhodnému výběru vstupních dokumentů.

Počet vybraných dokumentů se blíží vzorkovací frekvenci vyjádřené jako procento z celkového počtu dokumentů.

$sampleRate operátor byl představen v MongoDB 4.4.2.

Když použijete $sampleRate , zadáte vzorkovací frekvenci jako číslo s plovoucí desetinnou čárkou mezi 0 a 1 . Proces výběru používá jednotné náhodné rozdělení a vámi poskytnutá vzorkovací frekvence představuje pravděpodobnost, že daný dokument bude vybrán, když prochází kanálem.

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(
   [
      { 
        $match: { $sampleRate: 0.33 } 
      }
   ]
)

Výsledek:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Poskytnutím vzorkovací frekvence 0.33 , uvedli jsme, že by měla být vrácena zhruba třetina dokumentů.

Skutečný výsledek se však může značně lišit v závislosti na počtu dokumentů ve fondu. Kolekce s menším počtem dokumentů budou mít poměrně rozdílné výsledky, zatímco větší kolekce by se měly blížit očekávanému jednotnému náhodnému rozdělení.

Abych to demonstroval, zde je sada výsledků, kterou dostanu, když znovu spustím stejný kód:

{ "_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 }

A znovu:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

A ještě jednou:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Jedná se o menší sbírku, a proto se výsledky značně liší.

Pokud požadujete vrácení přesného počtu dokumentů, použijte $sample místo toho.


  1. Instalace Redis na CentOS 7

  2. Porozumění indexům MongoDB

  3. Návrh schématu databáze MongoDB

  4. JSON serializující Mongodb