मेरे पास MongoDB पर एक बहुत बड़ा संग्रह है और मैं उस संग्रह से डुप्लिकेट रिकॉर्ड को हटाना चाहता हूं। पहला विचार मेरे दिमाग में आता है कि इंडेक्स को छोड़ना और ड्रॉपड्यूप्स के साथ इंडेक्स का पुनर्निर्माण करना है। हालांकि, डुप्लिकेट डेटा मोंगोडीबी द्वारा संभाला जाने वाला बहुत अधिक है।MapReduce द्वारा MongoDB में डुप्लिकेट रिकॉर्ड को कैसे निकालें?
तो मैं मदद के लिए MapReduce में बदल जाता हूं। मेरी वर्तमान प्रगति यहाँ है।
m = function() {
emit(this.myid, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.userList.mapReduce(m,r, { out : "myoutput" });
और सभी डुप्लिकेट रिकॉर्ड के "myid" को "myoutput" संग्रह में संग्रहीत किया जाता है। हालांकि, मुझे नहीं पता कि myoutput.myid का संदर्भ देकर उपयोगकर्ता सूची से रिकॉर्ड को कैसे हटाया जाए।
db.myoutput.find({value: {$gt: 1}}).forEach(
function(obj) {
db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Btw, foreach का उपयोग कर समझदार MyID साथ सभी रिकॉर्ड को हटा देगा लगता है: यह कुछ इस तरह होना करने के लिए supposes। लेकिन मैं सिर्फ डुप्लिकेट रिकॉर्ड को हटाना चाहता हूं। पूर्व:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
अंतिम परिणाम केवल एक रिकॉर्ड को संरक्षित रखना चाहिए। क्या कोई मुझे इस पर कुछ मदद दे सकता है?
धन्यवाद। :)
धन्यवाद। यह काम करता हैं। हालांकि, myoutput संग्रह में 3 एम रिकॉर्ड होगा। निष्पादन गति बहुत धीमी है। क्या इसे तेज करना संभव है? –