Der kræves et par rettelser på forespørgslen, ellers er det næsten der. Opdateringen virker ikke, fordi $elemMatch
for attributeSet
(array of docs) felt skal ske på id
egenskaben for disse dokumenter til at filtrere og ikke på attributeSet.id , den ville ikke finde ud af, hvad det er. Og indlejret elemMatch er ikke påkrævet, brug blot punktnotation .
For at fejlfinde kan du prøve det med en søgeforespørgsel.
Forespørgsel (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
}
);