问题(Mongoose save all parameters from request body)显示了如何在一行代码中创建带有请求正文的新mongoose文档对象。
扩展这个问题,我想知道如何一次设置mongoose文档对象的所有字段。
router.route('/car')
.put(function(req, res, next) {
Car.findById(req.params.id, function (err, car) {
if (err) {
res.status(400).send(err);
} else {
if (!car)
return next(new Error('Failed to load car: ' + req.params.id));
car.name = req.body.name; // Code refactoring required
car.seats = req.body.seats;
car.engine_size = req.body.engine_size;
car.save(function(err) {
if(err)
res.status(400).send(err);
else
res.json(car);
});
}
});
});
创建文档var car = new Car(req.body);
是填写请求正文字段的完美方式
对于更新存在的mongoose文档,有比下面的行更好的方法:
car.name = req.body.name;
car.seats = req.body.seats;
car.engine_size = req.body.engine_size;
答案 0 :(得分:2)
您应该使用update而不是find。
router.route('/car')
.put(function(req, res, next) {
Car.update({ _id: mongoose.Types.ObjectId(req.params.id) },req.body)
.then(function (success) {
res.json();
})
.catch(function (error) {
res.status(404).send(err);
});
});
答案 1 :(得分:2)
您可以使用 Document.set()。
car.set(req.body)
try {
await car.save()
}catch(err){
console.error(e)
}
答案 2 :(得分:-1)
为了更新现有的mongoose文件,有比下面的行更好的方法吗?
为了更好地利用网络数据和性能,您应该记住,update()方法更新现有文档中的值,而save()方法用save()方法中传递的文档替换现有文档。
因此,如果您的模型很大并且您只想更新少量字段,那么更新是更好的选择。
希望这有帮助。