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

MongoDB $sampleRate

In MongoDB die $sampleRate Aggregation-Pipeline-Phase stimmt mit einer zufälligen Auswahl von Eingabedokumenten überein.

Die Anzahl der ausgewählten Dokumente entspricht ungefähr der Abtastrate, ausgedrückt als Prozentsatz der Gesamtzahl der Dokumente.

Die $sampleRate -Operator wurde in MongoDB 4.4.2 eingeführt.

Wenn Sie $sampleRate verwenden , geben Sie die Abtastrate als Fließkommazahl zwischen 0 an und 1 . Der Auswahlprozess verwendet eine gleichmäßige Zufallsverteilung, und die von Ihnen angegebene Stichprobenrate stellt die Wahrscheinlichkeit dar, dass ein bestimmtes Dokument ausgewählt wird, wenn es die Pipeline durchläuft.

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

Ergebnis:

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

Durch Bereitstellung einer Abtastrate von 0.33 , haben wir festgelegt, dass etwa ein Drittel der Dokumente zurückgesendet werden soll.

Das tatsächliche Ergebnis kann jedoch stark variieren, je nachdem, wie viele Dokumente sich in der Sammlung befinden. Sammlungen mit einer kleineren Anzahl von Dokumenten werden ziemlich unterschiedliche Ergebnisse haben, während größere Sammlungen näher an der erwarteten gleichmäßigen Zufallsverteilung liegen sollten.

Um dies zu demonstrieren, hier ist die Ergebnismenge, die ich erhalte, wenn ich denselben Code erneut ausführe:

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

Und nochmal:

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

Und noch einmal:

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

Dies ist eine kleinere Sammlung, daher variieren die Ergebnisse erheblich.

Wenn Sie eine genaue Anzahl von Dokumenten zurücksenden möchten, verwenden Sie das $sample statt.