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

कार्यात्मकताओं द्वारा MongoDB समूह

MongoDB ग्रुप बाय ज्यादातर मामलों में बहुत सीमित है, उदाहरण के लिए

- the result set must be lesser than 10000 keys.
- it will not work in sharded environments

इसलिए बेहतर होगा कि आप मैप का इस्तेमाल कम करें। तो क्वेरी इस तरह होगी

<स्ट्राइक> मैप =फंक्शन () {एमिट ({ए:ट्रू, बी:ट्रू}, {काउंट:1}); }

reduce = function(k, values) {
    var result = {count: 0};
    values.forEach(function(value) {
        result.count += value.count;
    });
    return result;
}

और फिर

db.list.mapReduce(map,reduce,{out: { inline : 1}})

इसका परीक्षण न किया गया संस्करण। मुझे बताएं कि क्या यह काम करता है

संपादित करें:

पहले का नक्शा कार्य दोषपूर्ण था। इसलिए आपको परिणाम नहीं मिल रहे हैं। यह होना चाहिए था

map = function () {
    emit({a:this.a, b:this.b}, {count:1});
}

परीक्षण डेटा:

> db.multi_group.insert({a:1,b:2})
> db.multi_group.insert({a:2,b:2})
> db.multi_group.insert({a:3,b:2})
> db.multi_group.insert({a:1,b:2})
> db.multi_group.insert({a:3,b:2})
> db.multi_group.insert({a:7,b:2})


> db.multi_group.mapReduce(map,reduce,{out: { inline : 1}})
{
    "results" : [
        {
            "_id" : {
                "a" : 1,
                "b" : 2
            },
            "value" : {
                "count" : 2
            }
        },
        {
            "_id" : {
                "a" : 2,
                "b" : 2
            },
            "value" : {
                "count" : 1
            }
        },
        {
            "_id" : {
                "a" : 3,
                "b" : 2
            },
            "value" : {
                "count" : 2
            }
        },
        {
            "_id" : {
                "a" : 7,
                "b" : 2
            },
            "value" : {
                "count" : 1
            }
        }
    ],
    "timeMillis" : 1,
    "counts" : {
        "input" : 6,
        "emit" : 6,
        "reduce" : 2,
        "output" : 4
    },
    "ok" : 1,
}

संपादित करें2:

काउंट>=2

. को लागू करने सहित पूरा समाधान
map = function () {
    emit({a:this.a, b:this.b}, {count:1,_id:this._id});
}

reduce = function(k, values) {
    var result = {count: 0,_id:[]};
    values.forEach(function(value) {
        result.count += value.count;
        result._id.push(value._id);
    });
    return result;
}

>db.multi_group.mapReduce(map,reduce,{out: { replace : "multi_result"}})

> db.multi_result.find({'value.count' : {$gte : 2}})
{ "_id" : { "a" : 1, "b" : 2 }, "value" : { "_id" : [   ObjectId("4f0adf2884025491024f994c"),   ObjectId("4f0adf3284025491024f994f") ], "count" : 2 } }
{ "_id" : { "a" : 3, "b" : 2 }, "value" : { "_id" : [   ObjectId("4f0adf3084025491024f994e"),   ObjectId("4f0adf3584025491024f9950") ], "count" : 2 } }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं MongoDB में सभी दस्तावेज़ों के लिए एक फ़ील्ड का नाम कैसे बदल सकता हूँ?

  2. मोंगोडब एग्रीगेशन फ्रेमवर्क:क्या $group इंडेक्स का उपयोग करता है?

  3. MongoDB पर क्वेरी ट्रिगर हटाएं

  4. नोड - नेवला 3.6 - आबादी वाले क्षेत्र के साथ क्रमबद्ध क्वेरी

  5. अजगर के साथ तानाशाही में निहित नेस्टेड डिक्ट्स या सरणियों पर मोंगोइंजिन में इस तरह के फ़िल्टर प्रश्नों को कैसे करें?