MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak znaleźć losowy rekord w Mongoose?

Ideą uzyskania losowego rekordu jest zapytanie o wszystkie pasujące rekordy, ale po prostu uzyskanie jednego. To właśnie findOne() robi bez podanych kryteriów.

Wtedy będziesz chciał wybrać losowy wpis we wszystkich możliwych meczach. Odbywa się to przez:

  1. Dowiedz się, ile może być możliwych wpisów — używamy count() na kolekcji do tego. Zauważ, że, jak wspomniano w komentarzach, count jest przestarzałe w wersji 4 i zamiast tego należy użyć wartości managedDocumentCount lub countDocuments. Różnica polega między innymi na precyzji/wykorzystaniu pamięci. Oto post SO, który trochę to omawia.

  2. Wymyśl losową liczbę w ramach naszego licznika.

  3. Użyj skip() aby "przeskoczyć" do żądanego dopasowania i zwrócić to.

Oto fragment zmodyfikowany na podstawie tej odpowiedzi na SO:

// 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie znaleziono katalogu danych MongoDB /data/db

  2. MongoDB:wyjątek w initAndListen:20 Próba utworzenia pliku blokady w katalogu tylko do odczytu:/data/db, zakończenie

  3. Przypadek indeksów haszowanych MongoDB

  4. Używasz JSON z MongoDB?

  5. Mongodb zlicza wszystkie elementy tablicy we wszystkich obiektach spełniających kryteria