sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $prøve

I MongoDB er $sample aggregeringspipeline-stadiet vælger tilfældigt det angivne antal dokumenter fra dets input.

Eksempel

Antag, at vi har en samling kaldet employees med følgende dokumenter:

{ "_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 bruge $sample trin for tilfældigt at vælge et specificeret antal dokumenter fra den samling.

Eksempel:

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 dette tilfælde specificerede jeg, at stikprøvestørrelsen er 3. Vi kan se, at tre dokumenter blev returneret i tilfældig rækkefølge.

Her er resultatet, hvis jeg kører den samme kode igen:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }

Vi får et andet udvalg af dokumenter.

Vi kan øge stikprøvestørrelsen ved at øge antallet.

Eksempel:

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 }

Returner alle dokumenter tilfældigt

Hvis den ønskede stikprøvestørrelse matcher eller er større end antallet af dokumenter i samlingen, returneres alle dokumenter i tilfældig rækkefølge.

Eksempel:

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 }

Hvordan $sample Beregner resultatet

$sample stage bruger en af ​​to metoder til at frembringe resultatet. Den faktiske anvendte metode afhænger af scenariet.

Følgende tabel viser, hvilken metode der bruges til hvert scenarie.

Scenarie Metoden brugt til at frembringe resultaterne
Alle følgende betingelser er opfyldt:
$sample er den første fase af rørledningen
– Den angivne stikprøvestørrelse er mindre end 5 % af de samlede dokumenter i samlingen
– Samlingen indeholder mere end 100 dokumenter
$sample bruger en pseudo-tilfældig markør til at vælge dokumenter.
Alle ovenstående betingelser er ikke mødt. $sample udfører en samlingsscanning efterfulgt af en tilfældig sortering for at vælge det angivne antal dokumenter.

Duplikater

MongoDB-dokumentationen advarer om, at $sample kan udskrive det samme dokument mere end én gang i sit resultatsæt.


  1. MongoDB :Indekser rækkefølge og forespørgselsrækkefølge skal matche?

  2. Kunne ikke oprette forbindelse til Redis på 127.0.0.1:6379:Forbindelse nægtet

  3. Rediger og gentag MongoDB oplog

  4. Befolk indlejret array i mongoose