2013-04-10 10 views
10

में ऐरे से विशिष्ट मूल्यों का चयन करना मेरे पास संग्रह नाम Alpha_Num है, इसमें निम्न संरचना है। मैं यह पता लगाने की कोशिश कर रहा हूं कि कौन सा वर्णमाला-संख्या जोड़ी अधिकतम संख्या में दिखाई देगी?मोंगोडीबी

अगर हम नीचे दिए गए डेटा के साथ जाते हैं, तो जोड़े एसीसीडी-123 जोड़ी efgh-10001 के रूप में दो बार दिखाई देता है, लेकिन दूसरा एक मेरे लिए एक वैध मामला नहीं है जैसा कि यह उसी दस्तावेज़ में दिखाई देता है।

{ 
    "_id" : 12345, 
    "Alphabet" : "abcd", 
     "Numerals" : [ 
      "123", 
      "456", 
      "2345" 
     ] 
} 
{ 
    "_id" : 123456, 
    "Alphabet" : "efgh", 
    "Numerals" : [ 
      "10001", 
      "10001", 
      "1002" 
     ] 
} 

{ 
    "_id" : 123456567, 
    "Alphabet" : "abcd", 
     "Numerals" : [ 
      "123" 
     ] 
} 

मैं एकत्रीकरण ढांचा, जैसे

नीचे
db.Alpha_Num.aggregate([ 
        {"$unwind":"$Numerals"}, 
        {"$group": 
           {"_id":{"Alpha":"$Alphabet","Num":"$Numerals"}, 
           "count":{$sum:1}} 
        }, 
        {"$sort":{"count":-1}} 
        ]) 

समस्या कुछ का उपयोग करने के इस क्वेरी यह जोड़ी EFGH-10001 दो बार देता है की कोशिश की। प्रश्न: उपर्युक्त स्थिति में सरणी "अंकों" से अलग मूल्यों का चयन कैसे करें?

उत्तर

23

समस्या हल हो गई।

db.Alpha_Num.aggregate([{ 
    "$unwind": "$Numerals" 
}, { 
    "$group": { 
      _id: { 
        "_id": "$_id", 
        "Alpha": "$Alphabet" 
      }, 
      Num: { 
        $addToSet: "$Numerals" 
      } 
    } 
}, { 
    "$unwind": "$Num" 
}, { 
    "$group": { 
      _id: { 
        "Alplha": "$_id.Alpha", 
        "Num": "$Num" 
      }, 
      count: { 
        "$sum": 1 
      } 
    } 
}]) 

$ addToSet का उपयोग कर समूहन और फिर से तनाव मुक्त चाल किया था। 10gen ऑनलाइन पाठ्यक्रम में से एक का जवाब मिला।