2

问题(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);是从请求正文中填充字段的完美方式。
对于更新现有的猫鼬文档,有没有比以下行更好的方法

car.name = req.body.name;
car.seats = req.body.seats;
car.engine_size = req.body.engine_size; 
4

3 回答 3

4

您应该使用更新而不是查找。

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);
    });
});
于 2016-04-30T05:52:09.503 回答
2

您可以使用Document.set()

car.set(req.body)
try {
    await car.save()                  
}catch(err){ 
    console.error(e)
}
于 2020-12-23T12:57:33.847 回答
0

为了更新现有的猫鼬文档,有没有比下面几行更好的方法?

为了更好地利用网络数据和性能,您应该记住,update() 方法更新现有文档中的值,而 save() 方法将现有文档替换为 save() 方法中传递的文档。

因此,如果您的模型很大并且您只想更新少数几个字段,那么更新是更好的选择。

希望这可以帮助。

于 2016-04-30T06:14:05.747 回答