猫鼬覆盖原始对象而不是更新
mongoose overriding original object instead of updating
我有这样的东西:
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 选项。它仍然不会只更新一个键。
您可以使用点符号来访问和设置对象内部的字段
const updateUser = await User.findOneAndUpdate(
{ email: req.body.email },
{ $set: { "pinnedKpi.Ver01": ["oooooo", "77777"] }},
{ upsert: true, new: true }
)
使用这个:
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}`]);
}
);
});
我有这样的东西:
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 选项。它仍然不会只更新一个键。
您可以使用点符号来访问和设置对象内部的字段
const updateUser = await User.findOneAndUpdate(
{ email: req.body.email },
{ $set: { "pinnedKpi.Ver01": ["oooooo", "77777"] }},
{ upsert: true, new: true }
)
使用这个:
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}`]);
}
);
});