MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मैं किसी सरणी में मानों के आधार पर संग्रह को कैसे सॉर्ट करूं?

जैसा कि आप पहले ही कोशिश कर चुके हैं, आप एक साधारण खोज के साथ "कुंजी" से "क्रमबद्ध" के रूप में एक सरणी के अंदर एक विशिष्ट आइटम निर्दिष्ट नहीं कर सकते हैं। इसके लिए आपको उन कुंजियों को प्राप्त करने के लिए समग्र विधि की आवश्यकता होगी, जिन्हें आप सॉर्ट करना चाहते हैं।

db.exam.aggregate([

     # Unwind to de-normalize
     { "$unwind": "$result" },

     # Group back to the document and extract each score
     { "$group": {
         "_id": "$_id",
         "result": { "$push": "$result" },
         "useruid": { "$first": "$useruid" },
         "exam_code": { "$first": "$exam_code" },
         "ess_time": { "$first": "$ess_time" },
         "Total": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Total" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Physics": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Physics" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Mathematics": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Mathematics" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Chemistry": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Chemistry" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Biology": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Biology" ] },
                     "$result.score",
                     0
                 ]
             }
         }
     }},

     # Sort on those scores
     { "$sort": {
         "Total": -1,
         "Physics": -1,
         "Mathematics": -1,
         "Chemistry": -1,
         "Biology": -1
     }},

     # Project final wanted fields
     { "$project": {
         "result": 1,
         "useruid": 1,
         "exam_code": 1,
         "ess_time": 1
     }}
])

तो यहाँ आप $cond एक $max के भीतर ऑपरेटर सरणी को खोलने के बाद कथन। डी-सामान्यीकृत दस्तावेज़ों में सभी समान मान नहीं होते हैं क्योंकि वे अब सरणी में आइटम का प्रतिनिधित्व करते हैं, इसलिए आप उनका परीक्षण करते हैं।

उन निकाली गई कुंजियों से आप अपने पूरे दस्तावेज़ों को फिर से क्रमित कर सकते हैं, और फिर अंत में उन फ़ील्ड को त्याग सकते हैं क्योंकि अब आपको उनकी आवश्यकता नहीं है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला - ईमेल सिंटैक्स मान्य करें

  2. मोंगोडीबी से प्रोजेक्टिंग परिणाम एफ # में खोजें

  3. सी # के साथ मोंगोडीबी में केवल एक निर्दिष्ट फ़ील्ड प्राप्त करें

  4. MongoError:फ़िल्टर पैरामीटर एक वस्तु होना चाहिए

  5. MongoDB डेटाबेस कोटा (SIZE) सेट करें