2015-10-09 7 views
6
select * from users ORDER BY FIELD(status, 'A', 'B', 'C', 'D') ASC; 

यह सभी उपयोगकर्ताओं को उनकी स्थिति के अनुसार सॉर्ट करेगा जैसे स्थिति 'ए' वाले सभी उपयोगकर्ता पहले 'बी' और इसी तरह आएंगे। मोंगो डीबी में बराबर क्या होगा? > स्थिति -मोंगो डीबी में मूल्य आधारित आदेश कैसे करें?

उत्तर

0

एएससी सॉर्ट करने के लिए: 1

db.users.find().sort({ status: 1 }) 

DESC सॉर्ट करने के लिए -> स्थिति: -1

db.users.find().sort({ status: -1 }) 
+0

यह एक साधारण प्रकार है। मैं मूल्यों के अनुसार कैसे क्रमबद्ध करूंगा। तो- स्थिति, 'सी', 'ए', 'बी', 'डी' - यह उपयोगकर्ताओं को स्थिति 'सी' के साथ पहले 'ए' और फिर से वापस कर देगा। –

+0

क्या आप पैरामीटर के रूप में स्थिति के साथ एक सरणी (क्रमबद्ध के रूप में क्रमबद्ध) भेजना चाहते हैं? – makcs

5

आप क्रम में प्रत्येक मान के लिए एक "वजन" $project करने की जरूरत है MongoDB शर्तों में, और इसका मतलब है .aggregate() विधि:

db.users.aggregate([ 
    { "$project": { 
     "status": 1, 
     "a_field": 1, 
     "another_field": 1, 
     "pretty_much_every_field": 1, 
     "weight": { 
      "$cond": [ 
       { "$eq": [ "$status", "A" ] }, 
       10, 
       { "$cond": [ 
        { "$eq": [ "$status", "B" ] }, 
        8, 
        { "$cond": [ 
         { "$eq": [ "$status", "C" ] }, 
         6, 
         { "$cond": [ 
          { "$eq": [ "$status", "D" ] }, 
          4, 
          0 
         ]} 
        ]} 
       ]} 
      ] 
     } 
    }}, 
    { "$sort": { "weight": -1 } } 
]) 

ternary$cond का घोंसला उपयोग प्रत्येक आइटम को "स्थिति" के लिए दिए गए तर्कों के क्रम में आदेशित "वजन" मान के रूप में माना जा सकता है।

बदले में यह $sort पर खिलाया जाता है, जहां अनुमानित मूल्य ("वजन") का उपयोग वेटेड मिलान द्वारा किए गए परिणामों को क्रमबद्ध करने के लिए किया जाता है।

तो इस तरह वरीयता को "स्थिति" मैचों के क्रम में दिया जाता है, जो क्रमबद्ध परिणामों में पहले दिखाई देता है।

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