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

मोंगोडब क्वेरी में एक फ़ील्ड के आधार पर अधिकतम लगातार रिकॉर्ड की संख्या पाएं

आप यह नक्शा कर सकते हैंसंचालन कम करें।

पहले मैपर:

var mapper = function () {


    if ( this.flag == true ) {
        totalCount++;
    } else {
        totalCount = 0;
    }

    if ( totalCount != 0 ) {
        emit (
        counter,
        {  _id: this._id, totalCount: totalCount }
    );
    } else {
      counter++;
    }

};

जो true . के कुल समय की एक चालू गिनती रखता है ध्वज में मूल्य देखा जाता है। यदि वह संख्या 1 से अधिक है तो हम मान का उत्सर्जन करते हैं, जिसमें दस्तावेज़ भी शामिल है _id . एक अन्य काउंटर जो कुंजी के लिए उपयोग किया जाता है, जब ध्वज false होता है, तो वृद्धि की जाती है , मैचों के लिए समूह "कुंजी" रखने के लिए।

फिर रिड्यूसर:

var reducer = function ( key, values ) {

    var result = { docs: [] };

    values.forEach(function(value) {
        result.docs.push(value._id);
        result.totalCount = value.totalCount;
    });

    return result;

};

बस _id को पुश करता है कुल गणना के साथ परिणाम सरणी पर मान।

फिर दौड़ें:

db.people.mapReduce(
    mapper,
    reducer,
   { 
       "out": { "inline": 1 }, 
       "scope": { 
           "totalCount": 0, 
           "counter": 0 
       }, 
       "sort": { "updated_at": 1 } 
   }
)

तो mapper . के साथ और reducer फ़ंक्शन, फिर हम "स्कोप" में उपयोग किए जाने वाले वैश्विक चर को परिभाषित करते हैं और "सॉर्ट" में पास करते हैं जो कि updated_at पर आवश्यक था। पिंड खजूर। जो परिणाम देता है:

{
    "results" : [
        {
            "_id" : 1,
            "value" : {
                "docs" : [
                     3,
                     4
                 ],
                 "totalCount" : 2
            }
        },
        {
            "_id" : 2,
            "value" : {
            "docs" : [
                7,
                8,
                5
             ],
             "totalCount" : 3
             }
        }
    ],
    "timeMillis" : 2,
    "counts" : {
            "input" : 7,
            "emit" : 5,
            "reduce" : 2,
            "output" : 2
    },
    "ok" : 1,
}

बेशक आप totalCount . को छोड़ सकते हैं परिवर्तनीय और केवल सरणी लंबाई का उपयोग करें, जो वही होगा। लेकिन चूंकि आप वैसे भी उस काउंटर का उपयोग करना चाहते हैं, इसे अभी जोड़ा गया है। लेकिन यह सिद्धांत है।

तो हाँ, यह mapReduce के अनुकूल एक समस्या थी, और अब आपके पास एक उदाहरण है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या module.require(...).* मॉड्यूल की एक प्रति लौटाता है। निर्यात। * या इसका एक संदर्भ?

  2. Mongoose में अलग-अलग मान वाले अनेक तत्वों को अपडेट करें

  3. मोंगोडब से कनेक्ट नहीं हो सकता

  4. स्थिति प्रतिशत के अनुसार समूह और योग MongoDb एकत्रीकरण

  5. असंवेदनशील कुशलता के मामले में MongoDB (पाइमोंगो के माध्यम से) को क्वेरी करना