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

मोंगो:बाहरी वजन के आधार पर कैसे छाँटें

सरणी को देखते हुए [4,7,90,1] आप अपनी क्वेरी में जो चाहते हैं वह यह है:

db.collection.aggregate([
   { "$project": {
       "user_id": 1,
       "content": 1,
       "date": 1,
       "weight": { "$or": [
           { "$eq": ["$user_id": 4] }, 
           { "$eq": ["$user_id": 7] }, 
           { "$eq": ["$user_id": 90] }, 
           { "$eq": ["$user_id": 1] }, 
       ]}
   }},
   { "$sort": { "weight": -1, "date": -1 } }
])

तो वह क्या करता है, उस $or . में निहित प्रत्येक आइटम के लिए शर्त, user_id दिए गए मान के विरुद्ध फ़ील्ड का परीक्षण किया जाता है, और $eq रिटर्न 1 या 0 true . के लिए या false

आप अपने कोड में जो कुछ भी करते हैं वह आपके द्वारा निर्माण . के सरणी में मौजूद प्रत्येक आइटम के लिए होता है $or . की सरणी स्थिति . तो यह सिर्फ प्रत्येक बराबर स्थिति के लिए हैश संरचना बना रहा है, इसे एक सरणी में पास कर रहा है और इसे $or के सरणी मान के रूप में प्लग कर रहा है हालत।

मुझे शायद पिछले कोड से $cond ऑपरेटर को छोड़ देना चाहिए था ताकि यह हिस्सा स्पष्ट हो।

यहां रूबी ब्रेन के लिए कुछ कोड दिया गया है:

userList = [4, 7, 90, 1];

orCond = [];

userList.each do |userId|
  orCond.push({ '$eq' => [ 'user_id', userId ] })
end

pipeline = [
    { '$project' => {
        'user_id' => 1,
        'content' => 1,
        'date' => 1,
        'weight' => { '$or' => orCond }
    }},
    { '$sort' => { 'weight' => -1, 'date' => -1 } }
]

यदि आप अलग-अलग वजन चाहते हैं और हम महत्वपूर्ण मूल्य जोड़े मानेंगे, तो आपको $cond के साथ घोंसला बनाना होगा:

db.collection.aggregate([
   { "$project": {
       "user_id": 1,
       "content": 1,
       "date": 1,
       "weight": { "$cond": [
           { "$eq": ["$user_id": 4] },
           10,
           { "$cond": [ 
               { "$eq": ["$user_id": 7] },
               9,
               { "$cond": [
                   { "$eq": ["$user_id": 90] },
                   7,
                   { "$cond": [
                       { "$eq": ["$user_id": 1] },
                       8, 
                       0
                   ]}
               ]}
           ]}
       ]}
   }},
   { "$sort": { "weight": -1, "date": -1 } }
])

ध्यान दें कि यह केवल एक वापसी मूल्य है, इन्हें क्रम में रखने की आवश्यकता नहीं है। और आप उस पीढ़ी के बारे में सोच सकते हैं।

इस संरचना को बनाने के लिए यहां देखें:

https://stackoverflow.com/a/22213246/2313887




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के साथ स्प्रिंग बूट का उपयोग कैसे करें

  2. एक CSV फ़ाइल में MongoDB क्वेरी परिणाम कैसे निर्यात करें

  3. MongoDB ढूँढें और संशोधित करें ()

  4. मोंगोडब में समूह के साथ मैक्स () का चयन करें

  5. MongoDB $ के जवाबों का क्रम क्वेरी में?