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

MongoDB उप-दस्तावेज़ ढूंढता है और परिणामों को क्रमबद्ध करता है

जैसा कि उल्लेख किया गया है, मुझे आशा है कि आपके दस्तावेज़ों में वास्तव में एक सरणी है, लेकिन यदि $elemMatch आपके लिए काम कर रहा है तो उन्हें करना चाहिए।

किसी भी दर पर, आप खोज का उपयोग करके किसी सरणी में किसी तत्व द्वारा सॉर्ट नहीं कर सकते हैं। लेकिन एक मामला है जहां आप का उपयोग करके ऐसा कर सकते हैं। .एग्रीगेट () :

db.collection.aggregate([

    // Match the documents that you want, containing the array
    { "$match": {
        "nlp.entities": {
            "$elemMatch": { 
                "text": "Neelie Kroes", 
                "type": "Person"   
            }
        }
    }},

    // Project to "store" the whole document for later, duplicating the array
    { "$project": {
        "_id": {
            "_id": "$_id",
            "url": "$url",
            "nlp": "$nlp"          
        },
        "entities": "$nlp.entities"
    }},

    // Unwind the array to de-normalize
    { "$unwind": "$entities" },

    // Match "only" the relevant entities
    { "$match": {
        "entities.text": "Neelie Kroes", 
        "entities.type": "Person"   
    }},

    // Sort on the relevance
    { "$sort": { "entities.relevance": -1 } },

    // Restore the original document form
    { "$project": {
        "_id": "$_id._id",
        "url": "$_id.url",
        "nlp": "$_id.nlp"
    }}
])

तो अनिवार्य रूप से, $match प्रासंगिक मिलान वाले दस्तावेज़ों के लिए शर्त, फिर आप <का उपयोग करें कोड>$प्रोजेक्ट मूल दस्तावेज़ को _id . में "स्टोर" करें फ़ील्ड और $unwind "इकाई" सरणी की "प्रतिलिपि"।

अगला $match सरणी सामग्री को केवल उन लोगों के लिए "फ़िल्टर" करता है जो प्रासंगिक हैं। फिर आप $sort लागू करें "मिलान" दस्तावेज़ों के लिए।

चूंकि "मूल" दस्तावेज़ _id . के अंतर्गत संग्रहीत किया गया था , आप $project का उपयोग करते हैं उस संरचना को "पुनर्स्थापित" करने के लिए जिसे दस्तावेज़ को वास्तव में शुरू करना था।

इस प्रकार आप किसी सरणी के अपने मिलान किए गए तत्व पर "क्रमबद्ध" करते हैं।

ध्यान दें कि यदि आपके पास मूल दस्तावेज़ के लिए एक सरणी के भीतर कई "मिलान" थे, फिर आपको एक अतिरिक्त $समूह अपना क्रम पूरा करने के लिए "प्रासंगिकता" फ़ील्ड के लिए $max मान प्राप्त करने के लिए चरण।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. संदेश माता-पिता के अंदर संदेश उत्तर एम्बेड करना mongodb का उपयोग करके mongodb के साथ

  2. सरणी नेवला का केवल अंतिम तत्व प्राप्त करें

  3. MongoDb:$lookup . के साथ गहराई से नेस्टेड ऑब्जेक्ट ढूंढें

  4. MongoDB:सरणी में न्यूनतम तत्व खोजें और इसे हटा दें

  5. Nodejs और Imagemagick के साथ छवियों का आकार बदलना