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 } }