V dotazu je potřeba pár oprav, jinak je to skoro tam. Aktualizace nefunguje, protože $elemMatch
pro attributeSet
(pole dokumentů) se má stát na id
vlastnost těchto dokumentů filtrovat a nikoli na attributeSet.id , nepřišlo by na to, co to je. A vnořený elemMatch není vyžadován, stačí použít tečkovou notaci .
Chcete-li ladit, můžete to vyzkoušet pomocí vyhledávacího dotazu.
Dotaz (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
}
);