आपका "नवीनतम" दस्तावेज़ हमेशा आपके सरणी के अंत में होगा जब तक कि आप किसी भी तरह से संशोधित न करें। जब $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
पर डालना आवश्यक है अपने आप को महत्व दें, यदि डेटा उस रूप में पहले से उपलब्ध नहीं है और एक स्ट्रिंग के रूप में आ गया है।
वे एक सरणी से अंतिम तत्व (वैकल्पिक रूप से स्पष्ट रूप से क्रमबद्ध) प्राप्त करने के आपके तरीके हैं।