sql >> Databasteknik >  >> NoSQL >> MongoDB

Beställer en resultatuppsättning slumpmässigt i mongo

Jag måste hålla med:det enklaste du kan göra är att installera ett slumpmässigt värde i dina dokument. Det behöver inte finnas ett enormt stort värdeintervall heller -- antalet du väljer beror på den förväntade resultatstorleken för dina frågor (1 000 - 1 000 000 distinkta heltal borde räcka i de flesta fall).

När du kör din fråga, oroa dig inte för det slumpmässiga fältet – i stället indexera det och använd det för att sortera. Eftersom det inte finns någon överensstämmelse mellan slumptalet och dokumentet bör du få ganska slumpmässiga resultat. Observera att kollisioner sannolikt kommer att resultera i att dokument returneras i naturlig ordning.

Medan detta är förvisso ett hack, du har en mycket enkel utrymningsväg:med tanke på MongoDB:s schemafria natur kan du helt enkelt sluta inkludera det slumpmässiga fältet när det finns stöd för slumpmässig sortering i servern. Om storleken är ett problem kan du köra ett batchjobb för att ta bort fältet från befintliga dokument. Det bör inte ske en betydande förändring i din klientkod om du utformar den noggrant.

Ett alternativ skulle vara att tänka länge och noga på antalet resultat som kommer att randomiseras och returneras för en given fråga. Det kanske inte är överdrivet dyrt att bara blanda i klientkoden (dvs. om du bara tar hänsyn till de senaste 10 000 inläggen).



  1. Mongodb kommer inte att starta

  2. Databasövervakning med ClusterControl

  3. pymongo:MongoClient eller Connection

  4. Uppdatering i forEach på mongodb shell