MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So finden Sie zufällige Datensätze in Mongoose

Die Idee hinter dem Abrufen eines zufälligen Datensatzes besteht darin, alle übereinstimmenden Datensätze abzufragen, aber nur einen zu erhalten. Das ist findOne() verzichtet auf vorgegebene Kriterien.

Dann möchten Sie einen zufälligen Eintrag in allen möglichen Übereinstimmungen auswählen. Dies geschieht durch:

  1. Finden Sie heraus, wie viele mögliche Einträge es geben könnte - wir verwenden count() auf der Sammlung dafür. Beachten Sie, dass, wie in den Kommentaren erwähnt, count ist in Version 4 veraltet und man sollte stattdessen schätzteDocumentCount oder countDocuments verwenden. Der Unterschied liegt unter anderem in der Genauigkeit/Speichernutzung. Hier ist ein SO-Beitrag, in dem es ein wenig diskutiert wird.

  2. Finden Sie eine Zufallszahl innerhalb unserer Zählung.

  3. Verwenden Sie skip() um zur gewünschten Übereinstimmung zu "springen" und diese zurückzugeben.

Hier ist ein aus dieser SO-Antwort modifizierter Ausschnitt:

// 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) 
    })
})