मोंगोडीबी में, मैं मानचित्र-कम करने वाले कार्यों को लिखने की कोशिश कर रहा हूं जो कुछ मानदंडों को पूरा करते समय केवल डेटा बचाता है।मैं MongoDB में अपने कम() फ़ंक्शन में डेटा कैसे सहेजूं?
मैं अपने reducer से emit() नहीं समझ सकता। यह हमेशा डेटा, एक तरफ या किसी अन्य को बचाता है।
यहां एक सामान्य उदाहरण है। डेटा के संदर्भ को अनदेखा करें - मैंने इस प्रश्न के उद्देश्य के लिए पूरी तरह से यह डेटा और कोड बनाया है।
डेटा सेट:
{ "_id" : ObjectId("52583b3a58da9769dda48853"), "date" : "01-01-2013", "count" : 1 }
{ "_id" : ObjectId("52583b3d58da9769dda48854"), "date" : "01-01-2013", "count" : 1 }
{ "_id" : ObjectId("52583b4258da9769dda48855"), "date" : "01-02-2013", "count" : 1 }
{ "_id" : ObjectId("52583b4f58da9769dda48856"), "date" : "01-03-2013", "count" : 4 }
मानचित्र फंक्शन:
// Map all data by (date, count)
var map = function() {
var key = this.date;
var value = this.count;
emit(key, value);
}
प्रसारण कि बस अवांछित डेटा पर ध्यान नहीं देता।
// Only save dates which have count > 2
var reducer = function(date, counts) {
var sum = Array.sum(counts);
if (sum > 2) {
return sum;
}
}
परिणाम (1 के मूल्य को नजरअंदाज नहीं किया गया था):
{ "_id" : "01-01-2013", "value" : null }
{ "_id" : "01-02-2013", "value" : 1 }
{ "_id" : "01-03-2013", "value" : 4 }
मैं भी एक खाली वापसी बयान में जोड़ा है, लेकिन एक ही परिणाम मिल गया:
// Only save dates which have count > 2
var reducer = function(date, counts) {
var sum = Array.sum(counts);
if (sum > 2) {
return sum;
}
else return;
}
मैं चाहते हैं क्या ऐसा होने के लिए मैप-कमी चलाने के बाद ही मेरे आउटपुट संग्रह में निम्न डेटा मौजूद होगा। मैं इसे कैसे पूरा कर सकता हूं?
{ "_id" : "01-03-2013", "value" : 4 }
यह चालाक है! मुझे यह देखने के लिए एक रन देना होगा कि मेरे वास्तविक डेटा पर कितनी जल्दी चलती है लेकिन लक्ष्य को पूरा करने के लिए यह एक बहुत अच्छी चाल है। धन्यवाद। – Kurtis
यदि आप कुछ परिणाम फ़िल्टर करना चाहते हैं तो मैं नक्शा/कम नहीं करता। पहले मानचित्र/कम करने के बाद बस हटाएं: db.mroutput.remove ({value: {$ lte: 2}})। निकालें() मानचित्र/कम से कम तेज़ी से चलाएगा। –
@RobMoore आप सही हैं; यह एक आसान और संभावित रूप से अधिक कुशल समाधान है। मुझे लगता है कि आपको इसे एक अलग उत्तर के रूप में पोस्ट करना चाहिए। – GolfWolf