शेल विधि का उपयोग करें findAndModify
आपकी आवश्यकताओं के अनुरूप।
लेकिन आप स्थितीय वर्ण का उपयोग नहीं कर सकते $
MongoDb में प्रोजेक्ट करते समय एक से अधिक बार, इसलिए आपको क्लाइंट-साइड पर स्वयं इसका ट्रैक रखना पड़ सकता है।
उपयोग arrayFilters
पोजिशनल ऑल ऑपरेटर के बजाय डीप नेस्टेड सब-डॉक्यूमेंट को अपडेट करने के लिए $[]
।
नीचे एक कार्यशील क्वेरी है -
var query = {
universe: 'comics'
};
var update = {
$set: {
'saga.$[outer].characters.$[inner].character': 'lobezno',
'saga.$[outer].characters.$[inner].picture': '618035022354.png',
}
};
var fields = {
'saga.characters': 1
};
var updateFilter = {
arrayFilters: [
{
'outer.name': 'x-men'
},
{
'inner.character': 'wolverine'
}
]
};
db.collection.findAndModify({
query,
update,
fields,
arrayFilters: updateFilter.arrayFilters
new: true
});