嗨,伙计们,我需要您对以下代码的帮助,我想更新 mongoose 中的子文档
代码如下:
const update = await Model.findOneAndUpdate({
_id: id,
"sponsors._id": sponsorId
}, {
$set: {
"sponsors.$": req.body
}
}, {
new: true
});
if (!update) {
return next(
new AppError("Something went wrong! Please try again later.", 400)
);
}
然而这段代码宁愿删除子文档并创建一个新的,我已经浏览了文档,这恰好是更正的方式,但我只是不明白为什么它宁愿删除而不是更新。
请帮忙
答案 0 :(得分:0)
MongoDB 正在替换子文档,因为这正是更新语句告诉它要做的事情。
位置运算符$
指的是匹配的子文档,更新sponsors.$
中的字段名是告诉MongoDB将匹配的子文档的值设置为req.body
。
要在该子文档中设置单个字段,请使用 sponsors.$.fieldname
。
如果字段名提前未知,您可以尝试动态构建更新文档。
updateDoc = {};
for (key in req.body)
{
updateDoc["sponsors.$."+key] = req.body[key]
}
然后将 updateDoc
传递给 $set
而不是 req.body