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

Ordenar un conjunto de resultados al azar en mongo

Tengo que estar de acuerdo:lo más fácil es instalar un valor aleatorio en sus documentos. Tampoco es necesario que haya un rango de valores tremendamente grande:el número que elija depende del tamaño de resultado esperado para sus consultas (1,000 - 1,000,000 enteros distintos deberían ser suficientes para la mayoría de los casos).

Cuando ejecute su consulta, no se preocupe por el campo aleatorio; en su lugar, indícelo y utilícelo para ordenar. Dado que no hay correspondencia entre el número aleatorio y el documento, debe obtener resultados bastante aleatorios. Tenga en cuenta que las colisiones probablemente darán como resultado que los documentos se devuelvan en orden natural.

Mientras esto es ciertamente un truco, tiene una ruta de escape muy fácil:dada la naturaleza libre de esquemas de MongoDB, simplemente puede dejar de incluir el campo aleatorio una vez que haya soporte para la ordenación aleatoria en el servidor. Si el tamaño es un problema, puede ejecutar un trabajo por lotes para eliminar el campo de los documentos existentes. No debería haber un cambio significativo en el código de su cliente si lo diseña con cuidado.

Una opción alternativa sería pensar largo y tendido sobre la cantidad de resultados que se aleatorizarán y devolverán para una consulta determinada. Puede que no sea demasiado costoso simplemente mezclar el código del cliente (es decir, si solo considera las 10 000 publicaciones más recientes).