sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $prov

I MongoDB, $sample aggregeringspipeline-steget väljer slumpmässigt det angivna antalet dokument från sin inmatning.

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(
   [
      { 
        $sample: { size: 3 } 
      }
   ]
)

Resultat:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }

I det här fallet specificerade jag att urvalsstorleken är 3. Vi kan se att tre dokument returnerades i slumpmässig ordning.

Här är resultatet om när jag kör samma kod igen:

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

Vi får ett annat urval av dokument.

Vi kan öka urvalsstorleken genom att öka antalet.

Exempel:

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 }

Returnera alla dokument slumpmässigt

Om den begärda urvalsstorleken matchar, eller är större än antalet dokument i samlingen, returneras alla dokument i slumpmässig ordning.

Exempel:

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 }

Hur $sample Beräknar resultatet

$sample stage använder en av två metoder för att ta fram resultatet. Den faktiska metoden som används beror på scenariot.

Följande tabell visar vilken metod som används för varje scenario.

Scenario Metod som används för att producera resultaten
Alla följande villkor är uppfyllda:
$sample är det första steget i pipelinen
– Den angivna provstorleken är mindre än 5 % av de totala dokumenten i samlingen
– Samlingen innehåller mer än 100 dokument
$sample använder en pseudo-slumpvis markör för att välja dokument.
Alla ovanstående villkor är inte träffade. $sample utför en samlingsskanning följt av en slumpmässig sortering för att välja det angivna antalet dokument.

Dubbletter

MongoDB-dokumentationen varnar för att $sample kan skriva ut samma dokument mer än en gång i dess resultatuppsättning.


  1. MongoDB C#-drivrutin - Ignorera fält vid bindning

  2. Gruppera efter specifikt element av array med mongo-aggregationsramverk

  3. Hur man installerar och konfigurerar MongoDB på Ubuntu

  4. Kör redis på nodejs Docker-bild