MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Échantillon aléatoire de MongoDB renvoyant des résultats fortement biaisés

Depuis MongoDB 3.4.9, une partie de la raison du biais que vous avez observé est que $sample repose presque entièrement sur l'implémentation du curseur aléatoire du moteur de stockage (voir SERVER-19183 ). Ceci est fait pour que $sample peut être performant lorsque la collection contient beaucoup de données. Cependant, étant donné que le moteur de stockage stocke les documents dans un ordre trié à l'aide d'une implémentation de type B-tree, il n'est pas toujours possible de créer un résultat vraiment aléatoire.

Il y a actuellement deux demandes de fonctionnalités pour améliorer $sample mécanique, à savoir SERVER-22069 et SERVER-22068 .

Cela dit, si vous avez besoin d'échantillons vraiment impartiaux de vos données, lancez votre propre $sample - comme solution est probablement la meilleure façon de procéder à ce stade. Quelque chose comme :

  1. Obtenir une liste de tous les _id dans la collection.
  2. Effectuez un échantillonnage aléatoire sur cette liste (par exemple, en utilisant Python random .choix ).
  3. Obtenez tous les documents pertinents à l'aide de l'échantillon _id , qui sera raisonnablement performant en fonction de la taille d'échantillon souhaitée, puisque _id est toujours indexé.