sql >> Database teknologi >  >> NoSQL >> MongoDB

Bestilling af et resultatsæt tilfældigt på mongo

Jeg må være enig:den nemmeste ting at gøre er at installere en tilfældig værdi i dine dokumenter. Der behøver heller ikke være et enormt stort interval af værdier -- det antal, du vælger, afhænger af den forventede resultatstørrelse for dine forespørgsler (1.000 - 1.000.000 forskellige heltal burde være nok i de fleste tilfælde).

Når du kører din forespørgsel, skal du ikke bekymre dig om det tilfældige felt - i stedet skal du indeksere det og bruge det til at sortere. Da der ikke er nogen overensstemmelse mellem det tilfældige nummer og dokumentet, bør du få ret tilfældige resultater. Bemærk, at kollisioner sandsynligvis vil resultere i, at dokumenter returneres i naturlig rækkefølge.

Mens dette er bestemt et hack, du har en meget nem flugtvej:givet MongoDBs skemafrie natur, kan du simpelthen stoppe med at inkludere det tilfældige felt, når der er understøttelse af tilfældig sortering på serveren. Hvis størrelsen er et problem, kan du køre et batchjob for at fjerne feltet fra eksisterende dokumenter. Der burde ikke være en væsentlig ændring i din klientkode, hvis du designer den omhyggeligt.

En alternativ mulighed ville være at tænke længe og grundigt over antallet af resultater, der vil blive randomiseret og returneret for en given forespørgsel. Det er måske ikke alt for dyrt blot at blande klientkoden (dvs. hvis du kun tager de seneste 10.000 indlæg i betragtning).



  1. MongoDB Datakatalog /data/db blev ikke fundet

  2. Hvordan laver man en Mongo-aggregeringsforespørgsel i Spring Data?

  3. Masseopdatering af dokumenter i MongoDB

  4. MongoDB PHP UTF-8 problemer