#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
);