MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $Beispiel

In MongoDB die $sample Die Phase der Aggregationspipeline wählt zufällig die angegebene Anzahl von Dokumenten aus ihrer Eingabe aus.

Beispiel

Angenommen, wir haben eine Sammlung namens employees mit folgenden Dokumenten:

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

Wir können das $sample verwenden Schritt, um zufällig eine bestimmte Anzahl von Dokumenten aus dieser Sammlung auszuwählen.

Beispiel:

db.employees.aggregate(
   [
      { 
        $sample: { size: 3 } 
      }
   ]
)

Ergebnis:

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

In diesem Fall habe ich angegeben, dass die Stichprobengröße 3 ist. Wir können sehen, dass drei Dokumente in zufälliger Reihenfolge zurückgegeben wurden.

Hier ist das Ergebnis, wenn ich denselben Code erneut ausführe:

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

Wir bekommen eine andere Auswahl an Dokumenten.

Wir können die Stichprobengröße erhöhen, indem wir die Anzahl erhöhen.

Beispiel:

db.employees.aggregate(
   [
      { 
        $sample: { size: 5 } 
      }
   ]
)

Ergebnis:

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

Alle Dokumente nach dem Zufallsprinzip zurücksenden

Wenn die angeforderte Stichprobengröße mit der Anzahl der Dokumente in der Sammlung übereinstimmt oder größer als diese ist, werden alle Dokumente in zufälliger Reihenfolge zurückgegeben.

Beispiel:

db.employees.aggregate(
   [
      { 
        $sample: { size: 100 } 
      }
   ]
)

Ergebnis:

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

Wie $sample Berechnet das Ergebnis

Das $sample stage verwendet eine von zwei Methoden, um das Ergebnis zu erzeugen. Die tatsächlich verwendete Methode hängt vom Szenario ab.

Die folgende Tabelle zeigt, welche Methode für jedes Szenario verwendet wird.

Szenario Methode zur Erstellung der Ergebnisse
Alle folgenden Bedingungen sind erfüllt:
$sample ist die erste Stufe der Pipeline
– Die angegebene Stichprobengröße beträgt weniger als 5 % der gesamten Dokumente in der Sammlung
– Die Sammlung umfasst mehr als 100 Dokumente
$sample verwendet einen pseudozufälligen Cursor, um Dokumente auszuwählen.
Alle oben genannten Bedingungen sind nicht getroffen. $sample führt einen Sammlungsscan durch, gefolgt von einer zufälligen Sortierung, um die angegebene Anzahl von Dokumenten auszuwählen.

Duplikate

Die MongoDB-Dokumentation warnt davor, dass $sample kann dasselbe Dokument mehr als einmal in seiner Ergebnismenge ausgeben.