MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Ordenando um conjunto de resultados aleatoriamente no mongo


Tenho que concordar:o mais fácil é instalar um valor aleatório em seus documentos. Também não precisa haver uma faixa tremendamente grande de valores - o número que você escolhe depende do tamanho do resultado esperado para suas consultas (1.000 - 1.000.000 inteiros distintos devem ser suficientes para a maioria dos casos).

Ao executar sua consulta, não se preocupe com o campo aleatório -- em vez disso, indexe-o e use-o para classificar. Como não há correspondência entre o número aleatório e o documento, você deve obter resultados bastante aleatórios. Observe que as colisões provavelmente resultarão em documentos sendo devolvidos em ordem natural.

Enquanto isso é certamente um hack, você tem uma rota de fuga muito fácil:dada a natureza livre de esquema do MongoDB, você pode simplesmente parar de incluir o campo aleatório quando houver suporte para classificação aleatória no servidor. Se o tamanho for um problema, você pode executar um trabalho em lote para remover o campo dos documentos existentes. Não deve haver uma mudança significativa no código do cliente se você o projetar com cuidado.

Uma opção alternativa seria pensar muito sobre o número de resultados que serão randomizados e retornados para uma determinada consulta. Pode não ser muito caro simplesmente embaralhar o código do cliente (ou seja, se você considerar apenas as 10.000 postagens mais recentes).