Je suis d'accord :la chose la plus simple à faire est d'installer une valeur aléatoire dans vos documents. Il n'est pas non plus nécessaire d'avoir une plage de valeurs extrêmement large - le nombre que vous choisissez dépend de la taille du résultat attendu pour vos requêtes (1 000 à 1 000 000 entiers distincts devraient suffire dans la plupart des cas).
Lorsque vous exécutez votre requête, ne vous souciez pas du champ aléatoire, indexez-le plutôt et utilisez-le pour trier. Puisqu'il n'y a pas de correspondance entre le nombre aléatoire et le document, vous devriez obtenir des résultats assez aléatoires. Notez que les collisions entraîneront probablement le retour des documents dans l'ordre naturel.
Pendant que cela est certainement un hack, vous avez une issue de secours très facile :étant donné la nature sans schéma de MongoDB, vous pouvez simplement arrêter d'inclure le champ aléatoire une fois que le tri aléatoire est pris en charge sur le serveur. Si la taille est un problème, vous pouvez exécuter un travail par lots pour supprimer le champ des documents existants. Il ne devrait pas y avoir de changement significatif dans votre code client si vous le concevez avec soin.
Une autre option serait de réfléchir longuement et sérieusement au nombre de résultats qui seront randomisés et renvoyés pour une requête donnée. Il n'est peut-être pas trop coûteux de simplement mélanger le code client (c'est-à-dire si vous ne considérez que les 10 000 publications les plus récentes).