我有这样的东西:
pinnedKpi: {
Ver01: { type: Array },
Ver02: { type: Array },
Ver03: { type: Array },
Ver04: { type: Array }
},
当我更新该对象时,说出Ver01键,我会得到类似的回信:
pinnedKpi: {
Ver01: [1,2,3,4],
}
它覆盖了整个数据结构,现在我无法访问其他VerX
键
这是我的更新代码
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}`]);
}
);
});
我仅使用upsert:true,仅new:true和niether选项进行了尝试。它仍然不会仅更新一个密钥。
答案 0 :(得分:1)
您可以使用点符号来访问和设置对象内部的字段
const updateUser = await User.findOneAndUpdate(
{ email: req.body.email },
{ $set: { "pinnedKpi.Ver01": ["oooooo", "77777"] }},
{ upsert: true, new: true }
)
答案 1 :(得分:1)
使用此:
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}`]);
}
);
});