2011-06-20 14 views
6

में एक विशेष क्षेत्र की औसत प्राप्त करने के लिए मान लीजिए कि मैं निम्नलिखित की तरह एक डाटासेट करते हैं:सबसे तेजी से रास्ता MongoDB

{ "_id" : ObjectId("4dd51c0a3f42cc01ab0e6506"), "views" : 1000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c0e3f42cc01ab0e6507"), "views" : 2000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 3000, "status" : 1 } 
{ "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 4000, "status" : 0 } 

क्या सबसे तेज़ तरीका है (प्रदर्शन के लिहाज से) के लिए दृश्य की औसत संख्या प्राप्त करने के लिए 1 की स्थिति वाले सभी दस्तावेज? क्या इस तरह की मूलभूत चीज़ के लिए मानचित्र/कमी आवश्यक है, या कोई और तरीका है?

उत्तर

7

उपयोग समूह: http://www.mongodb.org/display/DOCS/Aggregation

आप दृश्यों का योग के लिए दस्तावेजों के लिए एक काउंटर और एक अन्य की जरूरत है। अंतिम रूप देने में आप इन दो संख्याओं पर एक विभाजन करते हैं।

db.test.group(
    { cond: {"status": 1} 
    , initial: {count: 0, total:0} 
    , reduce: function(doc, out){ out.count++; out.total += doc.views } 
    , finalize: function(out){ out.avg = out.total/out.count } 
}); 
5

तेज़ तरीका किसी भी मामले में औसत प्राप्त करने के लिए - यह precalculate (शायद आप पृष्ठभूमि में यह कर सकते हैं) और अतिरिक्त क्षेत्र/संग्रह संग्रहीत करने के लिए पैदा करते हैं।

+2

बस सोच रहा है कि क्यों कम? मेरे जवाब में क्या गलत है? –

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