Devo essere d'accordo:la cosa più semplice da fare è installare un valore casuale nei tuoi documenti. Non è nemmeno necessario che ci sia un intervallo di valori tremendamente ampio:il numero che scegli dipende dalla dimensione del risultato previsto per le tue query (1.000 - 1.000.000 interi distinti dovrebbero essere sufficienti per la maggior parte dei casi).
Quando esegui la tua query, non preoccuparti del campo casuale, invece, indicizzalo e usalo per ordinare. Poiché non c'è corrispondenza tra il numero casuale e il documento, dovresti ottenere risultati abbastanza casuali. Tieni presente che le collisioni porteranno probabilmente alla restituzione dei documenti in ordine naturale.
Mentre questo è certamente un hack, hai una via di fuga molto semplice:data la natura priva di schemi di MongoDB, puoi semplicemente smettere di includere il campo casuale una volta che c'è il supporto per l'ordinamento casuale nel server. Se la dimensione è un problema, è possibile eseguire un processo batch per rimuovere il campo dai documenti esistenti. Non dovrebbero esserci modifiche significative nel codice client se lo progetti attentamente.
Un'opzione alternativa sarebbe quella di pensare a lungo e intensamente al numero di risultati che verranno randomizzati e restituiti per una determinata query. Potrebbe non essere eccessivamente costoso mescolare semplicemente il codice client (ad esempio, se consideri solo i 10.000 post più recenti).