प्रश्न में कुछ सुधार की आवश्यकता है, अन्यथा यह लगभग वहीं है। अपडेट काम नहीं कर रहा है क्योंकि $elemMatch
attributeSet
. के लिए (दस्तावेज़ों की सरणी) फ़ील्ड id
पर होनी है फ़िल्टर करने के लिए उन दस्तावेज़ों की प्रॉपर्टी attributeSet.id . पर नहीं , यह नहीं समझेगा कि यह क्या है। और नेस्टेड elemMatch की आवश्यकता नहीं है, बस डॉट नोटेशन का उपयोग करें ।
डीबग करने के लिए आप इसे खोज क्वेरी के साथ आज़मा सकते हैं।
क्वेरी (शेल):
db.collection.findOneAndUpdate(
{
_id: settingsToBeUpdated._id,
attributeSet: {
$elemMatch: {
id: attributeSetId,
"attributes.id": id
}
}
},
{
$set: {
"attributeSet.$[as].attributes.$[a].attributeName":
attributeDto.attributeName,
"attributeSet.$[as].attributes.$[a].defaultValue":
attributeDto.defaultValue,
"attributeSet.$[as].attributes.$[a].isRequired": attributeDto.isRequired
}
},
{
arrayFilters: [{ "as.id": attributeSetId }, { "a.id": id }],
returnNewDocument: true
}
);