MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगो डीबी कुल यादृच्छिक (फेरबदल) परिणाम

विशेष रूप से एकत्रीकरण ढांचे के लिए वास्तव में कोई मूल तरीका नहीं है क्योंकि अभी तक कोई उपलब्ध ऑपरेटर नहीं है जैसे कि यादृच्छिक संख्या उत्पन्न करना। तो जो भी मैच आप संभावित रूप से किसी फ़ील्ड को सॉर्ट करने के लिए प्रोजेक्ट कर सकते हैं वह स्थानांतरण बीज मूल्य की कमी के लिए "वास्तव में यादृच्छिक" नहीं होगा।

परिणाम वापस आने के बाद परिणामों को सरणी के रूप में "फेरबदल" करना बेहतर तरीका है। विभिन्न "फेरबदल" कार्यान्वयन हैं, यहां जावास्क्रिप्ट के लिए एक है:

function shuffle(array) {
   var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

लेकिन अगर आप वास्तव में बड़ी संख्या में परिणामों को फेरबदल करने की बात कर रहे हैं जैसे कि नए $out ऑपरेटर या वास्तव में कोई संग्रह, तो आप mapReduce का उपयोग करके "धोखा" दे सकते हैं।

db.collection.mapReduce(
    function(){
        var random = Math.floor( Math.random() * 100000 );
        emit({ rand: random, id: this._id }, this );
    },
    function(){},
    { out: { replace: "newcollection" } }
);

यह mapReduce की प्रकृति का लाभ उठाता है, जिसमें मुख्य मूल्य हमेशा क्रमबद्ध होता है। तो एक यादृच्छिक संख्या को कुंजी के प्रमुख भाग के रूप में शामिल करने से आपको हमेशा एक यादृच्छिक क्रमित परिणाम प्राप्त होगा।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सरणी डालें जहां तत्व मौजूद नहीं है और इसे अपडेट करें (कई शर्तों के साथ)

  2. लूप में findOne का उपयोग करना Node.js में बहुत अधिक समय लेता है

  3. रेल और मोंगोइड के साथ गतिशील गुण

  4. स्प्रिंग बूट के साथ MongoDB क्वेरी लॉग करें

  5. V4 से पहले MongoDB के ACID के अनुरूप नहीं होने का वास्तव में क्या मतलब था?