Você precisaria usar o
$
operador posicional em seu $set
. Para atribuir essas propriedades dinamicamente, com base no que está em seu req.body
, você precisaria construir seu $set
programaticamente. Se você quiser atualizar o nome, faça o seguinte:
Location.update(
{ 'competitors._id': req.params.competitorId },
{ $set: { 'competitors.$.name': req.body.name }},
(err, result) => {
if (err) {
res.status(500)
.json({ error: 'Unable to update competitor.', });
} else {
res.status(200)
.json(result);
}
}
);
Uma maneira de construir programaticamente o
$set
usando req.body
é fazendo o seguinte:let updateObj = {$set: {}};
for(var param in req.body) {
updateObj.$set['competitors.$.'+param] = req.body[param];
}
Veja este responda para mais detalhes.