आपको 2 अवधारणाओं का उपयोग करने की आवश्यकता है:मोंगोडब का स्थितीय ऑपरेटर और केवल उस प्रविष्टि के लिए संख्यात्मक अनुक्रमणिका का उपयोग करना जिसे आप अपडेट करना चाहते हैं।
स्थितीय ऑपरेटर आपको इस तरह की स्थिति का उपयोग करने की अनुमति देता है:
{"heroes.nickname": "test"}
और फिर मिली सरणी प्रविष्टि को इस प्रकार संदर्भित करें:
{"heroes.$ // <- the dollar represents the first matching array key index
जैसा कि आप "आइटम" में दूसरी सरणी प्रविष्टि को अपडेट करना चाहते हैं, और सरणी कुंजियाँ 0 अनुक्रमित हैं - यह कुंजी 1 है।
तो:
> db.denis.insert({_id:"43434", heroes : [{ nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]});
> db.denis.update(
{"heroes.nickname": "test"},
{$set: {
"heroes.$.items.1": "new_value"
}}
)
> db.denis.find()
{
"_id" : "43434",
"heroes" : [
{"nickname" : "test", "items" : ["", "new_value", "" ]},
{"nickname" : "test2", "items" : ["", "", "" ]}
]
}