sql >> Database >  >> NoSQL >> MongoDB

Hoe een willekeurig record in Mongoose te vinden

Het idee achter het verkrijgen van een willekeurig record is om alle overeenkomende records op te vragen, maar er slechts één te krijgen. Dit is wat findOne() doet zonder opgegeven criteria.

Dan wil je een willekeurig item kiezen in alle mogelijke wedstrijden. Dit wordt gedaan door:

  1. Ontdek hoeveel mogelijke vermeldingen er kunnen zijn - we gebruiken count() hiervoor op de collectie. Merk op dat, zoals vermeld in opmerkingen, count is verouderd in versie 4 en men zou in plaats daarvan geschatteDocumentCount of countDocuments moeten gebruiken. Het verschil zit hem onder andere in precisie/geheugengebruik. Hier is een SO-bericht waarin het een beetje wordt besproken.

  2. Verzin een willekeurig getal binnen onze telling.

  3. Gebruik skip() om naar de gewenste overeenkomst te "overslaan" en deze terug te sturen.

Hier is een fragment zoals gewijzigd van dit SO-antwoord:

// Get the count of all users
User.count().exec(function (err, count) {

  // Get a random entry
  var random = Math.floor(Math.random() * count)

  // Again query all users but only fetch one offset by our random #
  User.findOne().skip(random).exec(
    function (err, result) {
      // Tada! random user
      console.log(result) 
    })
})


  1. Een MessagePacked-hash opslaan in Redis

  2. een verzameling opvragen zonder het schema in mangoest door te geven

  3. MongoDB Upsert uitgelegd

  4. Hoe DIFF op gesorteerde set te krijgen