sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $sampleRate

I MongoDB, $sampleRate aggregeringspipelinesteget matchar ett slumpmässigt urval av indatadokument.

Antalet valda dokument approximerar samplingsfrekvensen uttryckt som en procentandel av det totala antalet dokument.

$sampleRate operatören introducerades i MongoDB 4.4.2.

När du använder $sampleRate , anger du samplingshastigheten som ett flyttal mellan 0 och 1 . Urvalsprocessen använder en enhetlig slumpmässig fördelning, och urvalsfrekvensen du anger representerar sannolikheten att ett visst dokument kommer att väljas när det passerar genom pipelinen.

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

Resultat:

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

Genom att tillhandahålla en samplingsfrekvens på 0.33 , specificerade vi att ungefär en tredjedel av dokumenten skulle returneras.

Det faktiska resultatet kan dock variera ganska rejält, beroende på hur många dokument som finns i samlingen. Samlingar med ett mindre antal dokument kommer att få ganska varierande resultat, medan större samlingar bör ligga närmare den förväntade enhetliga slumpmässiga fördelningen.

För att demonstrera detta, här är resultatuppsättningen jag får när jag kör samma kod igen:

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

Och igen:

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

Och än en gång:

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

Detta är en mindre samling, så resultaten varierar ganska mycket.

Om du behöver ett exakt antal dokument som ska returneras, använd $sample scenen istället.


  1. Hur kör jag Redis på Windows?

  2. Filtrera med regex MongoDB C#-drivrutin

  3. Mongoose drar ObjectId från arrayen

  4. Systemet har inte startats med systemd som init-system (PID 1). Kan inte operera