sql >> Base de Datos >  >> NoSQL >> MongoDB

Muestra aleatoria de MongoDB que arroja resultados muy sesgados

A partir de MongoDB 3.4.9, parte del motivo del sesgo que ha observado es que $sample se basa casi por completo en la implementación del cursor aleatorio del motor de almacenamiento (ver SERVER-19183 ). Esto se hace para que $sample podría ser eficaz cuando la colección contiene una gran cantidad de datos. Sin embargo, dado que el motor de almacenamiento almacena documentos en un orden ordenado utilizando una implementación de tipo árbol B, no siempre es posible crear un resultado verdaderamente aleatorio.

Actualmente hay dos solicitudes de funciones para mejorar $sample mecánica, a saber, SERVER-22069 y SERVER-22068 .

Habiendo dicho eso, si necesita muestras verdaderamente imparciales de sus datos, genere su propio $sample Es probable que una solución similar sea la mejor manera de proceder en este punto. Algo como:

  1. Obtener una lista de todos los _id en la colección.
  2. Realice un muestreo aleatorio en esta lista (por ejemplo, usando Python random .elección ).
  3. Obtenga todos los documentos relevantes usando el _id de muestra , que tendrá un rendimiento razonable según el tamaño de muestra que desee, ya que _id siempre está indexado.