तो जैसा कि आप ध्यान दें, नेवला में डिफ़ॉल्ट यह है कि जब आप इस तरह से एक सरणी में डेटा "एम्बेड" करते हैं तो आपको एक _id
मिलता है अपने स्वयं के उप-दस्तावेज़ गुणों के हिस्से के रूप में प्रत्येक सरणी प्रविष्टि के लिए मान। आप वास्तव में इस मान का उपयोग उस आइटम की अनुक्रमणिका निर्धारित करने के लिए कर सकते हैं जिसे आप अद्यतन करना चाहते हैं। ऐसा करने का MongoDB तरीका स्थितीय $
. है ऑपरेटर चर, जो सरणी में "मिलान" स्थिति रखता है:
Folder.findOneAndUpdate(
{ "_id": folderId, "permissions._id": permission._id },
{
"$set": {
"permissions.$": permission
}
},
function(err,doc) {
}
);
वह .findOneAndUpdate()
विधि संशोधित दस्तावेज़ वापस कर देगी या अन्यथा आप केवल .update()
. का उपयोग कर सकते हैं एक विधि के रूप में यदि आपको वापस किए गए दस्तावेज़ की आवश्यकता नहीं है। मुख्य भाग अद्यतन करने के लिए सरणी के तत्व "मिलान" कर रहे हैं और "पहचान" कर रहे हैं जो स्थितीय $
से मेल खाते हैं जैसा कि पहले उल्लेख किया गया है।
तो निश्चित रूप से आप $set
. का उपयोग कर रहे हैं ऑपरेटर ताकि केवल आपके द्वारा निर्दिष्ट तत्व वास्तव में सर्वर पर "ओवर द वायर" भेजे जाते हैं। आप इसे "डॉट नोटेशन" के साथ आगे ले जा सकते हैं और केवल उन तत्वों को निर्दिष्ट कर सकते हैं जिन्हें आप वास्तव में अपडेट करना चाहते हैं। जैसे:
Folder.findOneAndUpdate(
{ "_id": folderId, "permissions._id": permission._id },
{
"$set": {
"permissions.$.role": permission.role
}
},
function(err,doc) {
}
);
तो यह वह लचीलापन है जो MongoDB प्रदान करता है, जहाँ आप वास्तव में एक दस्तावेज़ को कैसे अपडेट करते हैं, इस बारे में बहुत "लक्षित" हो सकते हैं।
हालाँकि यह जो करता है वह किसी भी तर्क को "बाईपास" करता है जिसे आपने अपने "मोंगोज़" स्कीमा में बनाया होगा, जैसे कि "सत्यापन" या अन्य "प्री-सेव हुक"। ऐसा इसलिए है क्योंकि "इष्टतम" तरीका एक मोंगोडीबी "फीचर" है और इसे कैसे डिज़ाइन किया गया है। नेवला स्वयं इस तर्क पर एक "सुविधा" आवरण बनने की कोशिश करता है। लेकिन अगर आप खुद पर कुछ नियंत्रण रखने के लिए तैयार हैं, तो अपडेट सबसे अच्छे तरीके से किए जा सकते हैं।
इसलिए जहां संभव हो, अपने डेटा को "एम्बेडेड" रखें और संदर्भित मॉडल का उपयोग न करें। यह सरल अपडेट में "माता-पिता" और "बच्चे" दोनों वस्तुओं के परमाणु अद्यतन की अनुमति देता है जहां आपको समेकन के बारे में चिंता करने की आवश्यकता नहीं है। शायद यही एक कारण है कि आपको सबसे पहले MongoDB का चयन करना चाहिए था।