你这样做的原因是你实际上在更新
location
带有新对象的字段。每把钥匙在下面
位置
对象被擦除然后重写-这就是为什么
vicinity
丢失了。
要实现您的目标,可以使用嵌套键语法:
const updates = {
$set: {
email: req.body.email,
name: req.body.name,
photo: req.body.photo,
genres: req.body.genres,
musicLinks: req.body.musicLinks,
'location.type': req.body.location.type,
'location.coordinates': [req.body.location.coordinates[0], req.body.location.coordinates[1]],
'location.address': req.body.location.address,
}
};
之后:
const user = await User.findOneAndUpdate(
{ _id: req.user._id },
updates,
{ new: true, runValidators: true, context: 'query' }
);