2010-10-07 8 views
5

मेरे पास एक मोंगोडीबी संग्रह है जिसमें created_at प्रत्येक दस्तावेज़ में संग्रहीत है। इन्हें मोंगोडीबी डेट ऑब्जेक्ट के रूप में संग्रहीत किया जाता है उदा।प्रत्येक मिनट में दस्तावेज़ों की गिनती संख्या को कम करें MongoDB

{ "_id" : "4cacda7eed607e095201df00", "created_at" : "Wed Oct 06 2010 21:22:23 GMT+0100 (BST)", text: "something" } 
{ "_id" : "4cacdf31ed607e0952031b70", "created_at" : "Wed Oct 06 2010 21:23:42 GMT+0100  (BST)", text: "something" } 
.... 

मैं प्रत्येक मिनट के बीच बनाए गए आइटम की संख्या की गणना करना चाहते हैं, तो मैं गूगल चार्ट में डेटा पास कुछ इस तरह उत्पन्न करने के लिए कर सकते हैं:

alt text

मैं यह करने के लिए कैसे करते हैं एक नक्शा समारोह को कम करने के साथ, या क्या एक फैंसी MongoDB कुल फ़ंक्शन है जिसका मैं उपयोग कर सकता हूं?

उत्तर

8

मानचित्र समारोह एक टाइमस्टैम्प वस्तु, मिनट तक समायोजित कर देता है की 1. गिनती फेंकना चाहिए समारोह को कम सब मायने रखता है योग करना चाहिए:

map = function() { 
    var created_at_minute = new Date(this.created_at.getFullYear(), 
            this.created_at.getMonth(), 
            this.created_at.getDate(), 
            this.created_at.getHours(), 
            this.created_at.getMinutes()); 
    emit(created_at_minute, {count: 1}); 
} 

reduce = function(key, values) { 
    var total = 0; 
    for(var i = 0; i < values.length; i++) { 
     total += values[i].count; 
    } 
    return {count: total}; 
} 
+0

http://pastebin.me/51e1e0f24cb174991ebd9072f1d9bbec - कुछ मोटे टेस्टडाटा के साथ परीक्षण किया गया, ऐसा लगता है कि पोस्टर का इरादा क्या है ... +1 – gnarf

+0

यह एक इलाज करता है, धन्यवाद! – Tom

0

तुम भी group समारोह की कोशिश कर सकते हैं।


db.stat.group({key:{"create_at_minute":true} 
       ,initial:{count:0} 
       ,reduce:function(doc,out){out.count++}}) 

जहां create_at_minute आपके create_at फ़ील्ड मिनटों से घिरा हुआ है।

+0

create_at_minute कहां से आता है, क्या मैं उस क्वेरी को चलाने पर mongodb इसे समझता हूं? – Tom

+0

। समूह() एकत्रीकरण प्राप्त करने का एक आसान तरीका है, हालांकि इसमें सीमाएं हैं। बीएसओएन ऑब्जेक्ट लौटा होना चाहिए, 10K से कम कुंजी के साथ, अन्यथा आपको अपवाद मिलता है। – rubayeet

+0

10K minutues लगभग 6 दिन है ... – walla

संबंधित मुद्दे