Un paio di rettifiche richieste sulla query, altrimenti è quasi arrivata. L'aggiornamento non funziona perché $elemMatch
per attributeSet
(array di documenti) deve essere visualizzato su id
proprietà di tali documenti da filtrare e non su attributeSet.id , non capirebbe cosa sia. E elemMatch nidificato non è richiesto, usa semplicemente la notazione del punto .
Per eseguire il debug puoi provarlo con una query di ricerca.
Query (shell):
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
}
);