Элемент Мангуста в массиве объектов

#javascript #node.js #mongodb #mongoose #mern

Вопрос:

я хотел бы обновить и элемент в массиве объектов, если он уже есть в массиве.

На данный момент я делаю вот что :

 exports.pushDocumentsList = (req, res) => {
  const documents = [];

  documents.push({
    _id: req.body.document._id,
    fileid: req.body.document.fileid,
    filename: req.body.document.filename,
    url: req.body.document.url ? req.body.document.url : '',
    status: req.body.document.status ? req.body.document.status : '',
    expiredate: req.body.document.expiredate
      ? req.body.document.expiredate
      : '',
  });

  User.findOneAndUpdate(
    {
      _id: req.profile._id,
    },
    { $push: { documents } },
    { new: true, useFindAndModify: false },
    (err, docu) => {
      console.log(docu);
      if (err) {
        return res.status(400).json({
          error: "Non è stato possibile aggiornare i documenti dell'utente",
        });
      }
      return res.status(200).json({
        status: 'success',
        message: 'Documento caricato con successo',
        doc: req.body.document,
      });
    }
  );
};
 

Таким образом , это только добавляет элемент в массив, я хотел бы знать, как я могу обновить элемент, если он уже находится в массиве.

Ответ №1:

вы можете сделать это с помощью. обозначения и $eleMatch пример с точкой:

 const user = await User.findOneAndUpdate(
  { _id: req.profile._id, "documents._id": "someId" },
  {
    $set: {
      "documents.$.filename": "file changed"
      "documents.$.status": "status will change",
    },
  }, //update
  { new: true } //options
);