मैं समझता हूं कि आप क्या कह रहे हैं कि आप इस मामले में अंतिम तत्व से मेल खाना चाहते हैं या वास्तव में मैच को रिवर्स ऑर्डर में संसाधित करना चाहते हैं। इसे और स्थितिगत <कोड में संग्रहीत अनुक्रमणिका को संशोधित करने का कोई तरीका नहीं है>$ ऑपरेटर हमेशा "पहला" मैच होगा।
लेकिन आप इसके प्रति अपना दृष्टिकोण बदल सकते हैं, $पुश
सरणी के अंत में "संलग्न" करना है। लेकिन MongoDB 2.6 ने एक $position
संशोधक ताकि आप वास्तव में हमेशा "प्री-पेंड" कर सकें, जिसका अर्थ है कि आपका "सबसे पुराना" आइटम अंत में है।
उदाहरण के लिए इसे लें:
db.artest.update(
{ "array": { "$in": [5] } },
{ "$push": { "array": { "$each": [5], "$position": 0 } }},
{ "upsert": true }
)
db.artest.update(
{ "array": { "$in": [5] } },
{ "$push": { "array": { "$each": [6], "$position": 0 } }},
{ "upsert": true }
)
इसका परिणाम एक दस्तावेज़ में होता है जो सामान्य $push
. का "रिवर्स" होता है व्यवहार:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
वैकल्पिक रूप से आप $sort
तत्वों को "ऑर्डर" करने के लिए अपने दस्तावेज़ों को अपडेट करते समय संशोधक ताकि वे उलट हो जाएं। लेकिन डुप्लिकेट मान संग्रहीत होने पर यह सबसे अच्छा विकल्प नहीं हो सकता है।
तो यदि आप "नवीनतम" आइटम "पहले" से मेल खाना चाहते हैं तो अपने सरणी को "रिवर्स" में संग्रहीत करने पर ध्यान दें। वर्तमान में आपके "आखिरी से मिलान" व्यवहार प्राप्त करने का यही एकमात्र तरीका है।