एक यादृच्छिक रिकॉर्ड प्राप्त करने के पीछे का विचार सभी मिलान करने वाले रिकॉर्ड को क्वेरी करना है लेकिन केवल एक प्राप्त करना है। यह है findOne()
बिना किसी मापदंड के करता है।
फिर आप सभी संभावित मैचों में एक यादृच्छिक प्रविष्टि चुनना चाहेंगे। यह इसके द्वारा किया जाता है:
-
पता करें कि कितनी संभावित प्रविष्टियां हो सकती हैं - हम
count()
. का उपयोग करते हैं इसके लिए संग्रह पर। ध्यान दें, जैसा कि टिप्पणियों में बताया गया है,count
संस्करण 4 में पदावनत किया गया है और इसके बजाय किसी को अनुमानित डॉक्यूमेंटकाउंट या काउंट डॉक्यूमेंट्स का उपयोग करना चाहिए। अन्य बातों के अलावा सटीक/स्मृति उपयोग में भिन्न है। यहाँ एक SO पोस्ट इस पर थोड़ी चर्चा कर रही है। -
हमारी गिनती के भीतर एक यादृच्छिक संख्या के साथ आओ।
-
skip()
Use का उपयोग करें वांछित मैच को "स्किप" करने के लिए और उसे वापस करने के लिए।
इस 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)
})
})