2015-02-03 12 views
9

में तिमाही बुद्धिमानी को समूहबद्ध करने के लिए कैसे करें मेरे पास एक दस्तावेज़ है जिसमें एक तिथि है और मैं तिमाही आधार के अनुसार दस्तावेज़ को समूहबद्ध करना चाहता हूं। मैं इसे MongoDB में कैसे कर सकता हूं?
मेरे स्कीमा है:मोंगोडीबी

var ekgsanswermodel = new mongoose.Schema({ 
    userId: {type: Schema.Types.ObjectId}, 
    topicId : {type: Schema.Types.ObjectId}, 
    ekgId : {type: Schema.Types.ObjectId}, 
    answerSubmitted :{type: Number}, 
    dateAttempted : { type: Date}, 
    title : {type: String}, 
    submissionSessionId : {type: String} 
}); 

1 तिमाही महीने 1, 2, 3 2 तिमाही महीने 4, 5, 6, 4 तिमाही ऊपर से इतने पर होते हैं और होते हैं। मेरे अंतिम जवाब होना चाहिए:

"result" : [ 
    { 
    _id: { 
     quater: 
    }, 
    _id: { 
     quater: 
    }, 
    _id: { 
     quater: 
    }, 
    _id: { 
     quater: 
    } 
    } 
+0

आप MongoDB के mapreduce उपयोग करने की कोशिश की है:

db.collection.aggregate([ {$project:{"date":1, "quarter":{$cond:[{$lte:[{$month:"$date"},3]}, "first", {$cond:[{$lte:[{$month:"$date"},6]}, "second", {$cond:[{$lte:[{$month:"$date"},9]}, "third", "fourth"]}]}]}}}, {$group:{"_id":{"quarter":"$quarter"},"results":{$push:"$date"}}} ]) 

विशिष्ट अपने स्कीमा के लिए? http://docs.mongodb.org/manual/core/map-reduce/ मुझे लगता है कि आप अपने महीनों को गोलाकार MonthNumber/4 द्वारा मानचित्रित कर सकते हैं। कुछ उत्सर्जित करने की तरह (यह। संख्या/4, यह। संख्या)। और RedUCE भाग में, आप सभी महीनों को समूहित करते हैं। – AzaFromKaza

+0

मैंने मैप्रिडस की कोशिश नहीं की है। मुझे एक उदाहरण दे सकता है। मैंने उपरोक्त स्कीमा भी जोड़ा। –

+0

मेरा समाधान @grishabh को कभी न मानें, नीचे दिया गया एक बेहतर है। मोंगोड मैप्रिडस आपको ऑपरेशन को कम करने के परिणामस्वरूप एक सरणी रखने की अनुमति नहीं देता है। संदर्भ: http://stackoverflow.com/questions/8175015/mongodb-mapreduce-reduce-multiple-not-supported-yet – AzaFromKaza

उत्तर

11

आप अगर $cond ऑपरेटर के उपयोग की जांच करने के कर सकता है:

  • $month<= 3 है, परियोजना एक क्षेत्र "एक" के रूप में मूल्य के साथ quarter नाम दिया है।
  • $month<= 6 है, quarter नामक एक फ़ील्ड मूल्य "दो" के रूप में प्रोजेक्ट करें।
  • $month<= 9 है, quarter नामक एक फ़ील्ड मूल्य "तीन" के रूप में प्रोजेक्ट करें।
  • अन्यथा quarter फ़ील्ड का मान "चौथा" होगा।
  • quarter फ़ील्ड द्वारा।

कोड:

db.collection.aggregate([ 
{$project:{"dateAttempted":1,"userId":1,"topicId":1,"ekgId":1,"title":1, 
      "quarter":{$cond:[{$lte:[{$month:"$dateAttempted"},3]}, 
          "first", 
          {$cond:[{$lte:[{$month:"$dateAttempted"},6]}, 
            "second", 
            {$cond:[{$lte:[{$month:"$dateAttempted"},9]}, 
              "third", 
              "fourth"]}]}]}}}, 
{$group:{"_id":{"quarter":"$quarter"},"results":{$push:"$$ROOT"}}} 
]) 
+1

thanx @BatScream, कृपया आप इस क्वेरी को वसंत-डेटा-मगोडब में कर सकते हैं। – user1503117