Ab MongoDB 3.4.9 ist ein Grund für die von Ihnen beobachtete Verzerrung unter anderem $sample
stützt sich fast vollständig auf die Random-Cursor-Implementierung der Speicher-Engine (siehe SERVER-19183
). ). Dies geschieht so, dass $sample
könnte leistungsfähig sein, wenn die Sammlung viele Daten enthält. Da die Speicher-Engine Dokumente jedoch mithilfe einer B-Baum-Implementierung in einer sortierten Reihenfolge speichert, ist es nicht immer möglich, ein wirklich zufälliges Ergebnis zu erzeugen.
Derzeit gibt es zwei Funktionsanfragen für besseres $sample
Mechanik, nämlich SERVER-22069
und SERVER-22068
.
Wenn Sie jedoch wirklich unvoreingenommene Stichproben Ihrer Daten benötigen, rollen Sie Ihre eigene $sample
-ähnliche Lösung ist wahrscheinlich der beste Weg, um an dieser Stelle fortzufahren. Etwas wie:
- Erhalten Sie eine Liste aller
_id
in der Sammlung. - Führen Sie eine zufällige Auswahl dieser Liste durch (z. B. mit Pythons random .Auswahl ).
- Beziehen Sie alle relevanten Dokumente unter Verwendung der Beispiel-
_id
, die abhängig von der gewünschten Stichprobengröße angemessen leistungsfähig ist, da_id
wird immer indiziert.