I have something like this:
pinnedKpi: {
Ver01: { type: Array },
Ver02: { type: Array },
Ver03: { type: Array },
Ver04: { type: Array }
},
when I update this object, on say the Ver01 key i get something like this back:
pinnedKpi: {
Ver01: [1,2,3,4],
}
it overrides the entire data structure, and now I can't access my other VerX
keys
Here is my update code
app.post('/savePinned', (req, res) => {
User.findOneAndUpdate(
{ email: req.body.email },
{
$set: {
pinnedKpi: { [`Ver0${req.body.kpiVersion}`]: req.body.pinnedKpi }
}
},
{ upsert: true, new: true },
function(err, user) {
if (err) console.log('error saving pinned kpi', err);
res.send(user.pinnedKpi[`Ver0${req.body.kpiVersion}`]);
}
);
});
I have tried it with only upsert:true, only new:true, and niether option.. It still won't update just one key.
Use this:
app.post('/savePinned', (req, res) => {
User.findOneAndUpdate(
{ email: req.body.email },
{
$set: {
["pinnedKpi.Ver0"+req.body.kpiVersion]: req.body.pinnedKpi
}
},
{ upsert: true, new: true },
function(err, user) {
if (err) console.log('error saving pinned kpi', err);
res.send(user.pinnedKpi[`Ver0${req.body.kpiVersion}`]);
}
);
});