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

मोंगोस में एम्बेडेड दस्तावेज़ में किसी सरणी की अंतिम वस्तु को कैसे पुनर्प्राप्त करें?

आपका "नवीनतम" दस्तावेज़ हमेशा आपके सरणी के अंत में होगा जब तक कि आप किसी भी तरह से संशोधित न करें। जब $push ऑपरेटर या क्लाइंट कोड में सरणी हेरफेर विधियों का उपयोग करके जोड़ा गया।

केवल ऑपरेटर जैसे $addToSet या स्पष्ट रूप से $push . में संशोधक का उपयोग करना ऑपरेशन इसे बदल देगा।

जैसे, जब किसी सरणी के अंत में, आप आमतौर पर $slice , सरणी के "अंत" से आइटम प्राप्त करने के लिए ऋणात्मक अनुक्रमणिका के साथ:

Model.findById("55d3a39565698bbc68079e31")
    .select({ "comments": { "$slice": -1 }})
    .exec(function(err,doc) {

    })

यदि आपने वास्तव में पहले बताए अनुसार सरणी को संशोधित किया है जहां नवीनतम तिथि सरणी में अंतिम तत्व नहीं है तो आपको $sort अद्यतन पर संशोधक। यदि आप $position . के बारे में पूछते हैं तो यह आम तौर पर केवल "अयोग्य" होगा संशोधक या आपने $addToSet . का उपयोग किया है . $position जानबूझकर किया जाएगा और आप सॉर्ट भी नहीं कर सकते हैं, लेकिन आप हमेशा $addToSet के बाद सरणी को सॉर्ट कर सकते हैं इस तरह का ऑपरेशन, जो सरणी की किसी भी अन्य सामग्री को बदले बिना सभी तिथियों को क्रम में रखता है:

Model.findByIdAndUpdate("55d3a39565698bbc68079e31",
   { "$push": { "comments": { "$each": [], "$sort": { "date": 1 } } } }
)

सरणी के साथ वही $slice modified संशोधित किया गया कार्रवाई क्वेरी पर लागू होती है क्योंकि सरणी अब दिनांक के अनुसार क्रम में है।

यदि फिर भी आपका इरादा अपने दस्तावेज़ों में सरणी को क्रम से बाहर छोड़ना है, या किसी अन्य क्रम में आप चाहते हैं, लेकिन आप नवीनतम तिथि भी प्राप्त करना चाहते हैं, तो आप .aggregate() से $sort और $last पुनः प्राप्त करें सरणी प्रविष्टि:

Model.aggregate(
    [
        { "$match": { "_id": ObjectID("55d3a39565698bbc68079e31") } },
        { "$unwind": "$comments" },
        { "$sort": { "comments.date": 1 } },
        { "$group": {
            "_id": "$_id",
            "author": { "$first": "$author" },
            "link": { "$first": "$link" },
            "title": { "$first": "$title" },
            "date": { "$first": "$date" },
            "comments": { "$last": "$comments" }
        }}
    ]
)

यह देखते हुए कि नेवले के साथ एकत्रीकरण ढांचे का उपयोग करते समय, _id अन्य प्रश्नों में होने वाली "ऑटोकास्टिंग" नहीं होती है (यह डिज़ाइन द्वारा है), इसलिए इसे ObjectId पर डालना आवश्यक है अपने आप को महत्व दें, यदि डेटा उस रूप में पहले से उपलब्ध नहीं है और एक स्ट्रिंग के रूप में आ गया है।

वे एक सरणी से अंतिम तत्व (वैकल्पिक रूप से स्पष्ट रूप से क्रमबद्ध) प्राप्त करने के आपके तरीके हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB C# गैर-जेनेरिक बेस क्लास से विरासत में मिली जेनेरिक क्लास के साथ ड्राइवर टाइप डिस्क्रिमिनेटर

  2. मुझे MongoDB के लिए --rest विकल्प कहाँ जोड़ना चाहिए?

  3. Cosmos MongoDB एकीकरण के साथ Azure फ़ंक्शन सहेज नहीं रहा है

  4. MongoDB खोज का उपयोग करके स्वत:पूर्ण सुविधा लागू करें

  5. Django + Heroku + MongoDB एटलस (Djongo) =डेटाबेस त्रुटि बिना किसी अपवाद के