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

MongoDB सरणी को क्वेरी करें और सबसे अधिक मिलान वाले तत्वों के साथ क्रमबद्ध करें

आप इसे एकत्रीकरण ढांचे के साथ कर सकते हैं, हालांकि यह आसान नहीं है। समस्या यह है कि कोई $in नहीं है एकत्रीकरण ढांचे के हिस्से के रूप में ऑपरेटर। तो आपको सरणी में प्रत्येक आइटम को प्रोग्रामिक रूप से मिलान करना होगा, जो बहुत गन्दा हो जाता है। संपादित करें :फिर से व्यवस्थित किया गया ताकि मैच पहले हो, अगर $in एक अच्छे हिस्से को फ़िल्टर करने में आपकी मदद करता है।

db.test.aggregate(
  {$match:{"array.1":{$in:[100, 140,80]}}}, // filter to the ones that match
  {$unwind:"$array.1"}, // unwinds the array so we can match the items individually
  {$group: { // groups the array back, but adds a count for the number of matches
    _id:"$_id", 
    matches:{
      $sum:{
        $cond:[
          {$eq:["$array.1", 100]}, 
          1, 
          {$cond:[
            {$eq:["$array.1", 140]}, 
            1, 
            {$cond:[
              {$eq:["$array.1", 80]}, 
              1, 
              0
              ]
            }
            ]
          }
          ]
        }
      }, 
    item:{$first:"$array.item"}, 
    "1":{$push:"$array.1"}
    }
  }, 
  {$sort:{matches:-1}}, // sorts by the number of matches descending
  {$project:{matches:1, array:{item:"$item", 1:"$1"}}} // rebuilds the original structure
);

आउटपुट:

{
"result" : [
    {
        "_id" : ObjectId("50614c02162d92b4fbfa4448"),
        "matches" : 2,
        "array" : {
            "item" : 3,
            "1" : [
                100,
                90,
                140
            ]
        }
    },
    {
        "_id" : ObjectId("50614bb2162d92b4fbfa4446"),
        "matches" : 1,
        "array" : {
            "item" : 1,
            "1" : [
                100,
                130,
                255
            ]
        }
    }
],
"ok" : 1
}

आप matches को छोड़ सकते हैं यदि आप इसे $project . से बाहर छोड़ते हैं तो परिणाम से बाहर फ़ील्ड करें अंत में।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्वेरी में मौजूद नहीं फ़ील्ड वाले खोज परिणाम दस्तावेज़ों से कैसे निकालें?

  2. पिक<> टाइपस्क्रिप्ट के साथ दायर नेस्टेड का उपयोग कैसे करें

  3. Nodejs में क्लाइंट त्रुटि के लिए भेजे जाने के बाद मुझे हेडर सेट क्यों नहीं किया जा रहा है?

  4. यदि सरणी में कोई मिलान नहीं मिला तो पहला तत्व लौटाएं

  5. MongoDB 4.2 डेटा बेस से डुप्लिकेट निकालें