MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Node.js - Mongoose - Atualizar matriz aninhada com todos os valores em req.body


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.