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.