2014-08-28 5 views
5

मैं सभी उपयोगकर्ताओं को user_totaldocs और user_totalthings लाने और योग उन चरों को प्राप्त करना चाहता हूं।प्रश्नोत्तरी सभी के साथ mongoose

यह कैसे संभव हो सकता है?

var user_schema = mongoose.Schema({ 
    local : { 
     ... 
     ... 
     user_id   : String, 
     user_totaldocs : Number, 
     user_totalthings  : Number 
     .... 

    } 
}); 

उत्तर

12

आप Aggregation Pipeline उपयोग कर सकते हैं एक परिणाम के लिए गणना की फ़ील्ड्स जोड़ने के लिए: यहाँ उपयोगकर्ता स्कीमा है। mongo खोल का उपयोग करके नीचे कुछ उदाहरण दिए गए हैं, लेकिन मोंगोस के Aggregate() helper में सिंटैक्स समान है।

उदाहरण के लिए, रकम (उपयोगकर्ता दस्तावेज़ प्रति) की गणना करने के लिए आप में $add expression उपयोग कर सकते हैं एक $project stage:

db.user.aggregate(
    // Limit to relevant documents and potentially take advantage of an index 
    { $match: { 
     user_id: "foo" 
    }}, 

    { $project: { 
     user_id: 1, 
     total: { $add: ["$user_totaldocs", "$user_totalthings"] } 
    }} 
) 

से अधिक दस्तावेज़ आप उदाहरण के लिए एक $sum accumulator के साथ एक $group stage उपयोग करने के लिए, की जरूरत भर में योग की गणना करने के लिए:

db.user.aggregate(
    { $group: { 
     _id: null, 
     total:  { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } }, 
     totaldocs: { $sum: "$user_totaldocs" }, 
     totalthings: { $sum: "$user_totalthings" } 
    }} 
) 

आप केवल एक total फ़ील्ड चाहते हैं; मैंने कई क्षेत्रों की गणना के उदाहरण के रूप में totaldocs और totalthings में जोड़ा है।

एक समूह null की _id सभी दस्तावेजों $group चरण के लिए पारित कर दिया से मूल्यों गठबंधन होगा, लेकिन आप भी (user_id द्वारा इस तरह के समूह के रूप में) यहाँ अन्य मापदंड का उपयोग कर सकते हैं।

4

आप मोंगोडब द्वारा प्रदान किए गए एकत्रीकरण ढांचे का उपयोग कर सकते हैं।

यदि आप संग्रह (सभी उपयोगकर्ताओं के लिए जिसका अर्थ है) भर में user_totalthings की user_totaldocs का योग और योग को लाने के लिए चाहते हैं, करते हैं - -

db.user_schemas.aggregate(
[ 
    { 
    $group : { 
     user_id : null, 
     user_totaldocs: { $sum: "$user_totaldocs"}, // for your case use local.user_totaldocs 
     user_totalthings: { $sum: "$user_totalthings" }, // for your case use local.user_totalthings 
     count: { $sum: 1 } // for no. of documents count 
    } 
    } 
]) 

में विशेष उपयोगकर्ता के लिए user_totaldocs और user_totalthings संक्षेप में अपने मामले के लिए एक संग्रह (यह मानते हुए एक उपयोगकर्ता के लिए एकाधिक दस्तावेज़ देखते हैं), यह, प्रत्येक उपयोगकर्ता के लिए राशि वापस आ जाएगी DO -

db.user_schemas.aggregate(
[ 
    { 
    $group : { 
     user_id : "$user_id", 
     user_totaldocs: { $sum: "$user_totaldocs"}, // for your case use local.user_totaldocs 
     user_totalthings: { $sum: "$user_totalthings" }, // for your case use local.user_totalthings 
     count: { $sum: 1 } // for no. of documents count 
    } 
    } 
]) 

व्यक्तिगत उपयोगकर्ता आईडी प्रदान की आवश्यकता नहीं है।

अधिक जानकारी के लिए पढ़ें: 1. http://docs.mongodb.org/manual/reference/operator/aggregation/group/#pipe._S_group 2. http://docs.mongodb.org/manual/core/aggregation/

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