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

मैं मोंगोडब का उपयोग करके प्रति विशिष्ट क्षेत्र में कई रिकॉर्ड कैसे चुन सकता हूं?

आप अभी तक एकत्रीकरण ढांचे का उपयोग करके ऐसा नहीं कर सकते हैं - आप प्रत्येक समूह के लिए $ अधिकतम या शीर्ष दिनांक मान प्राप्त कर सकते हैं लेकिन एकत्रीकरण ढांचे में अभी तक शीर्ष एन जमा करने का कोई तरीका नहीं है और पूरे दस्तावेज़ को परिणाम सेट में धक्का देने का कोई तरीका नहीं है (केवल अलग-अलग फ़ील्ड)।

तो आपको MapReduce पर वापस आना होगा। यहां कुछ ऐसा है जो काम करेगा, लेकिन मुझे यकीन है कि कई प्रकार हैं (सभी को किसी विशिष्ट विशेषता के आधार पर वस्तुओं की एक सरणी को सॉर्ट करने की आवश्यकता होती है, मैंने अपना समाधान इस प्रश्न के उत्तर

मानचित्र फ़ंक्शन - समूह नाम को एक कुंजी के रूप में और पूरे शेष दस्तावेज़ को मान के रूप में आउटपुट करता है - लेकिन यह इसे एक सरणी वाले दस्तावेज़ के रूप में आउटपुट करता है क्योंकि हम प्रति समूह परिणामों की एक सरणी जमा करने का प्रयास करेंगे:

map = function () { 
    emit(this.name, {a:[this]}); 
}

कम करें फ़ंक्शन एक ही समूह से संबंधित सभी दस्तावेज़ों को एक सरणी (कॉनसैट के माध्यम से) में जमा करेगा। ध्यान दें कि यदि आप दिनांक की जांच करके केवल शीर्ष पांच सरणी तत्वों को रखने के लिए कम करें को अनुकूलित करते हैं तो आपको अंतिम रूप देने की आवश्यकता नहीं होगी, और आप मैप्रिडस चलाने के दौरान कम मेमोरी का उपयोग करेंगे (यह भी तेज़ होगा)।

reduce = function (key, values) {
    result={a:[]};
    values.forEach( function(v) {
        result.a = v.a.concat(result.a);
    } );
    return result;
}

चूंकि मैं प्रत्येक कुंजी के लिए सभी मान रख रहा हूं, इसलिए मुझे प्रति कुंजी केवल नवीनतम पांच तत्वों को निकालने के लिए एक अंतिम कार्य की आवश्यकता है।

final = function (key, value) {
      Array.prototype.sortByProp = function(p){
       return this.sort(function(a,b){
       return (a[p] < b[p]) ? 1 : (a[p] > b[p]) ? -1 : 0;
      });
    }

    value.a.sortByProp('date');
    return value.a.slice(0,5);
}

आपके द्वारा प्रदान किए गए टेम्पलेट दस्तावेज़ के समान टेम्पलेट का उपयोग करके, आप इसे mapReduce कमांड को कॉल करके चलाते हैं:

> db.top5.mapReduce(map, reduce, {finalize:final, out:{inline:1}})
{
    "results" : [
        {
            "_id" : "group1",
            "value" : [
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe13"),
                    "name" : "group1",
                    "date" : ISODate("2013-04-17T20:07:59.498Z"),
                    "contents" : 0.23778377776034176
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe0e"),
                    "name" : "group1",
                    "date" : ISODate("2013-04-17T20:07:59.467Z"),
                    "contents" : 0.4434165076818317
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe09"),
                    "name" : "group1",
                    "date" : ISODate("2013-04-17T20:07:59.436Z"),
                    "contents" : 0.5935856597498059
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe04"),
                    "name" : "group1",
                    "date" : ISODate("2013-04-17T20:07:59.405Z"),
                    "contents" : 0.3912118375301361
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfdff"),
                    "name" : "group1",
                    "date" : ISODate("2013-04-17T20:07:59.372Z"),
                    "contents" : 0.221651989268139
                }
            ]
        },
        {
            "_id" : "group2",
            "value" : [
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe14"),
                    "name" : "group2",
                    "date" : ISODate("2013-04-17T20:07:59.504Z"),
                    "contents" : 0.019611883210018277
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe0f"),
                    "name" : "group2",
                    "date" : ISODate("2013-04-17T20:07:59.473Z"),
                    "contents" : 0.5670706110540777
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe0a"),
                    "name" : "group2",
                    "date" : ISODate("2013-04-17T20:07:59.442Z"),
                    "contents" : 0.893193120136857
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe05"),
                    "name" : "group2",
                    "date" : ISODate("2013-04-17T20:07:59.411Z"),
                    "contents" : 0.9496864483226091
                },
                {
                    "_id" : ObjectId("516f011fbfd3e39f184cfe00"),
                    "name" : "group2",
                    "date" : ISODate("2013-04-17T20:07:59.378Z"),
                    "contents" : 0.013748752186074853
                }
            ]
        },
        {
            "_id" : "group3",
                        ...
                }
            ]
        }
    ],
    "timeMillis" : 15,
    "counts" : {
        "input" : 80,
        "emit" : 80,
        "reduce" : 5,
        "output" : 5
    },
    "ok" : 1,
}

प्रत्येक परिणाम में समूह नाम के रूप में _id होता है और उस समूह के नाम के संग्रह से सबसे हाल के पांच दस्तावेज़ों की सरणी के रूप में मान होते हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MeteorJS MongoDB परिनियोजन त्रुटि

  2. MEAN स्टैक का उपयोग करके ब्राउज़र में एक बार फिर से अपलोड की गई छवियों को सर्वर साइड में कैसे दिखाया जाए?

  3. उल्का/मोंगोडब:प्रमाणीकरण और पढ़ने/लिखने के लिए विभिन्न डीबी का प्रयोग करें

  4. जावा से मोंगो एसएसएल प्रतिकृति सेट से कनेक्ट नहीं हो सकता

  5. MongoDB में संग्रहीत प्रक्रिया